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 }