enbas/internal/executor/execute.go

156 lines
2.8 KiB
Go
Raw Normal View History

package executor
import (
"fmt"
"codeflow.dananglin.me.uk/apollo/enbas/internal/config"
"codeflow.dananglin.me.uk/apollo/enbas/internal/printer"
)
func Execute(
command string,
args []string,
noColor bool,
configDir string,
) error {
var (
enbasConfig *config.Config
enbasPrinter *printer.Printer
err error
)
switch command {
case commandInit, commandVersion:
enbasPrinter = printer.NewPrinter(noColor, "", 0)
default:
enbasConfig, err = config.NewConfigFromFile(configDir)
if err != nil {
enbasPrinter = printer.NewPrinter(noColor, "", 0)
enbasPrinter.PrintFailure("unable to load the configuration: " + err.Error() + ".")
return err
}
enbasPrinter = printer.NewPrinter(
noColor,
enbasConfig.Integrations.Pager,
enbasConfig.LineWrapMaxWidth,
)
}
if err = execute(
command,
args,
enbasPrinter,
enbasConfig,
configDir,
); err != nil {
enbasPrinter.PrintFailure("(" + command + ") " + err.Error() + ".")
return err
}
return nil
}
func execute(
command string,
args []string,
enbasPrinter *printer.Printer,
enbasConfig *config.Config,
configDir string,
) error {
executorMap := map[string]Executor{
commandAccept: NewAcceptExecutor(
enbasPrinter,
enbasConfig,
),
commandAdd: NewAddExecutor(
enbasPrinter,
enbasConfig,
),
commandBlock: NewBlockExecutor(
enbasPrinter,
enbasConfig,
),
commandCreate: NewCreateExecutor(
enbasPrinter,
enbasConfig,
),
commandDelete: NewDeleteExecutor(
enbasPrinter,
enbasConfig,
),
commandEdit: NewEditExecutor(
enbasPrinter,
enbasConfig,
),
commandFollow: NewFollowExecutor(
enbasPrinter,
enbasConfig,
),
commandInit: NewInitExecutor(
enbasPrinter,
configDir,
),
commandLogin: NewLoginExecutor(
enbasPrinter,
enbasConfig,
),
commandMute: NewMuteExecutor(
enbasPrinter,
enbasConfig,
),
commandReject: NewRejectExecutor(
enbasPrinter,
enbasConfig,
),
commandRemove: NewRemoveExecutor(
enbasPrinter,
enbasConfig,
),
commandSwitch: NewSwitchExecutor(
enbasPrinter,
enbasConfig,
),
commandUnfollow: NewUnfollowExecutor(
enbasPrinter,
enbasConfig,
),
commandUnmute: NewUnmuteExecutor(
enbasPrinter,
enbasConfig,
),
commandUnblock: NewUnblockExecutor(
enbasPrinter,
enbasConfig,
),
commandShow: NewShowExecutor(
enbasPrinter,
enbasConfig,
),
commandVersion: NewVersionExecutor(
enbasPrinter,
),
commandWhoami: NewWhoamiExecutor(
enbasPrinter,
enbasConfig,
),
}
exe, ok := executorMap[command]
if !ok {
return UnknownCommandError{Command: command}
}
if err := exe.Parse(args); err != nil {
return fmt.Errorf("flag parsing error: %w", err)
}
if err := exe.Execute(); err != nil {
return fmt.Errorf("execution error: %w", err)
}
return nil
}