From a3a1adbf141ada7ef69847d4da37f887ee121f1c Mon Sep 17 00:00:00 2001 From: Dan Anglin Date: Fri, 9 Aug 2024 19:40:46 +0100 Subject: [PATCH] checkpoint: now generate the executors in the executors package --- cmd/enbas/main.go | 8 +--- internal/executor/executors.go | 85 ++++++++++++++++++++++++++++++++++ internal/executor/login.go | 26 ----------- internal/executor/version.go | 46 +----------------- internal/executor/whoami.go | 28 ++--------- internal/internal.go | 2 +- 6 files changed, 91 insertions(+), 104 deletions(-) create mode 100644 internal/executor/executors.go diff --git a/cmd/enbas/main.go b/cmd/enbas/main.go index f8168a9..49e7734 100644 --- a/cmd/enbas/main.go +++ b/cmd/enbas/main.go @@ -140,8 +140,6 @@ func run() error { executor.CommandLogin: executor.NewLoginExecutor( enbasPrinter, enbasConfig, - executor.CommandLogin, - executor.CommandSummaryLookup(executor.CommandLogin), ), executor.CommandMute: executor.NewMuteOrUnmuteExecutor( enbasPrinter, @@ -193,18 +191,14 @@ func run() error { ), executor.CommandVersion: executor.NewVersionExecutor( enbasPrinter, - executor.CommandVersion, - executor.CommandSummaryLookup(executor.CommandVersion), binaryVersion, buildTime, goVersion, gitCommit, ), - executor.CommandWhoami: executor.NewWhoAmIExecutor( + executor.CommandWhoami: executor.NewWhoamiExecutor( enbasPrinter, enbasConfig, - executor.CommandWhoami, - executor.CommandSummaryLookup(executor.CommandWhoami), ), } diff --git a/internal/executor/executors.go b/internal/executor/executors.go new file mode 100644 index 0000000..15864f4 --- /dev/null +++ b/internal/executor/executors.go @@ -0,0 +1,85 @@ +package executor + +import ( + "flag" + + "codeflow.dananglin.me.uk/apollo/enbas/internal/config" + "codeflow.dananglin.me.uk/apollo/enbas/internal/printer" +) + +// LoginExecutor is the executor for the login command. +type LoginExecutor struct { + *flag.FlagSet + printer *printer.Printer + config *config.Config + instance string +} + +func NewLoginExecutor( + printer *printer.Printer, + config *config.Config, +) *LoginExecutor { + exe := LoginExecutor{ + FlagSet: flag.NewFlagSet("login", flag.ExitOnError), + printer: printer, + config: config, + } + + exe.Usage = commandUsageFunc("login", "Log into an account on GoToSocial", exe.FlagSet) + exe.StringVar(&exe.instance, "instance", "", "The instance that you want to log into") + return &exe +} + +// VersionExecutor is the executor for the version command. +type VersionExecutor struct { + *flag.FlagSet + printer *printer.Printer + full bool + binaryVersion string + buildTime string + goVersion string + gitCommit string +} + +func NewVersionExecutor( + printer *printer.Printer, + binaryVersion string, + buildTime string, + goVersion string, + gitCommit string, +) *VersionExecutor { + exe := VersionExecutor{ + FlagSet: flag.NewFlagSet("version", flag.ExitOnError), + printer: printer, + binaryVersion: binaryVersion, + buildTime: buildTime, + goVersion: goVersion, + gitCommit: gitCommit, + } + + exe.Usage = commandUsageFunc("version", "Prints the application's version and build information", exe.FlagSet) + exe.BoolVar(&exe.full, "full", false, "Set to true to print the build information in full") + return &exe +} + +// WhoamiExecutor is the executor for the whoami command. +type WhoamiExecutor struct { + *flag.FlagSet + printer *printer.Printer + config *config.Config +} + +func NewWhoamiExecutor( + printer *printer.Printer, + config *config.Config, +) *WhoamiExecutor { + exe := WhoamiExecutor{ + FlagSet: flag.NewFlagSet("whoami", flag.ExitOnError), + printer: printer, + config: config, + } + + exe.Usage = commandUsageFunc("whoami", "Prints the account that you are currently logged into", exe.FlagSet) + + return &exe +} diff --git a/internal/executor/login.go b/internal/executor/login.go index 971d100..240be48 100644 --- a/internal/executor/login.go +++ b/internal/executor/login.go @@ -1,40 +1,14 @@ package executor import ( - "flag" "fmt" "strings" "codeflow.dananglin.me.uk/apollo/enbas/internal/client" "codeflow.dananglin.me.uk/apollo/enbas/internal/config" - "codeflow.dananglin.me.uk/apollo/enbas/internal/printer" "codeflow.dananglin.me.uk/apollo/enbas/internal/utilities" ) -type LoginExecutor struct { - *flag.FlagSet - - printer *printer.Printer - config *config.Config - instance string -} - -func NewLoginExecutor(printer *printer.Printer, config *config.Config, name, summary string) *LoginExecutor { - loginExe := LoginExecutor{ - FlagSet: flag.NewFlagSet(name, flag.ExitOnError), - - printer: printer, - config: config, - instance: "", - } - - loginExe.StringVar(&loginExe.instance, flagInstance, "", "Specify the instance that you want to login to.") - - loginExe.Usage = commandUsageFunc(name, summary, loginExe.FlagSet) - - return &loginExe -} - func (l *LoginExecutor) Execute() error { var err error diff --git a/internal/executor/version.go b/internal/executor/version.go index ad89c5a..59df58a 100644 --- a/internal/executor/version.go +++ b/internal/executor/version.go @@ -1,51 +1,7 @@ package executor -import ( - "flag" - - "codeflow.dananglin.me.uk/apollo/enbas/internal/printer" -) - -type VersionExecutor struct { - *flag.FlagSet - - printer *printer.Printer - showFullVersion bool - binaryVersion string - buildTime string - goVersion string - gitCommit string -} - -func NewVersionExecutor( - printer *printer.Printer, - name, - summary, - binaryVersion, - buildTime, - goVersion, - gitCommit string, -) *VersionExecutor { - command := VersionExecutor{ - FlagSet: flag.NewFlagSet(name, flag.ExitOnError), - - printer: printer, - binaryVersion: binaryVersion, - buildTime: buildTime, - goVersion: goVersion, - gitCommit: gitCommit, - showFullVersion: false, - } - - command.BoolVar(&command.showFullVersion, flagFull, false, "prints the full build information") - - command.Usage = commandUsageFunc(name, summary, command.FlagSet) - - return &command -} - func (v *VersionExecutor) Execute() error { - v.printer.PrintVersion(v.showFullVersion, v.binaryVersion, v.buildTime, v.goVersion, v.gitCommit) + v.printer.PrintVersion(v.full, v.binaryVersion, v.buildTime, v.goVersion, v.gitCommit) return nil } diff --git a/internal/executor/whoami.go b/internal/executor/whoami.go index 69677a9..070348c 100644 --- a/internal/executor/whoami.go +++ b/internal/executor/whoami.go @@ -1,40 +1,18 @@ package executor import ( - "flag" "fmt" "codeflow.dananglin.me.uk/apollo/enbas/internal/config" - "codeflow.dananglin.me.uk/apollo/enbas/internal/printer" ) -type WhoAmIExecutor struct { - *flag.FlagSet - - printer *printer.Printer - config *config.Config -} - -func NewWhoAmIExecutor(printer *printer.Printer, config *config.Config, name, summary string) *WhoAmIExecutor { - whoExe := WhoAmIExecutor{ - FlagSet: flag.NewFlagSet(name, flag.ExitOnError), - - printer: printer, - config: config, - } - - whoExe.Usage = commandUsageFunc(name, summary, whoExe.FlagSet) - - return &whoExe -} - -func (c *WhoAmIExecutor) Execute() error { - config, err := config.NewCredentialsConfigFromFile(c.config.CredentialsFile) +func (e *WhoamiExecutor) Execute() error { + config, err := config.NewCredentialsConfigFromFile(e.config.CredentialsFile) if err != nil { return fmt.Errorf("unable to load the credential config: %w", err) } - c.printer.PrintInfo("You are logged in as '" + config.CurrentAccount + "'.\n") + e.printer.PrintInfo("You are logged in as '" + config.CurrentAccount + "'.\n") return nil } diff --git a/internal/internal.go b/internal/internal.go index 00bbfb5..fbc2eba 100644 --- a/internal/internal.go +++ b/internal/internal.go @@ -1,6 +1,6 @@ package internal -//go:generate go run ../cmd/enbas-cli-generators --path-to-enbas-cli-schema ../schema/enbas_cli_schema.json --path-to-enbas-executors ../executors-wip.go +//go:generate go run ../cmd/enbas-cli-generators --path-to-enbas-cli-schema ../schema/enbas_cli_schema.json --path-to-enbas-executors ./executor/executors.go const ( ApplicationName = "enbas"