checkpoint: now generate the executors in the executors package

This commit is contained in:
Dan Anglin 2024-08-09 19:40:46 +01:00
parent d1f5e57703
commit a3a1adbf14
Signed by: dananglin
GPG key ID: 0C1D44CFBEE68638
6 changed files with 91 additions and 104 deletions

View file

@ -140,8 +140,6 @@ func run() error {
executor.CommandLogin: executor.NewLoginExecutor( executor.CommandLogin: executor.NewLoginExecutor(
enbasPrinter, enbasPrinter,
enbasConfig, enbasConfig,
executor.CommandLogin,
executor.CommandSummaryLookup(executor.CommandLogin),
), ),
executor.CommandMute: executor.NewMuteOrUnmuteExecutor( executor.CommandMute: executor.NewMuteOrUnmuteExecutor(
enbasPrinter, enbasPrinter,
@ -193,18 +191,14 @@ func run() error {
), ),
executor.CommandVersion: executor.NewVersionExecutor( executor.CommandVersion: executor.NewVersionExecutor(
enbasPrinter, enbasPrinter,
executor.CommandVersion,
executor.CommandSummaryLookup(executor.CommandVersion),
binaryVersion, binaryVersion,
buildTime, buildTime,
goVersion, goVersion,
gitCommit, gitCommit,
), ),
executor.CommandWhoami: executor.NewWhoAmIExecutor( executor.CommandWhoami: executor.NewWhoamiExecutor(
enbasPrinter, enbasPrinter,
enbasConfig, enbasConfig,
executor.CommandWhoami,
executor.CommandSummaryLookup(executor.CommandWhoami),
), ),
} }

View file

@ -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
}

View file

@ -1,40 +1,14 @@
package executor package executor
import ( import (
"flag"
"fmt" "fmt"
"strings" "strings"
"codeflow.dananglin.me.uk/apollo/enbas/internal/client" "codeflow.dananglin.me.uk/apollo/enbas/internal/client"
"codeflow.dananglin.me.uk/apollo/enbas/internal/config" "codeflow.dananglin.me.uk/apollo/enbas/internal/config"
"codeflow.dananglin.me.uk/apollo/enbas/internal/printer"
"codeflow.dananglin.me.uk/apollo/enbas/internal/utilities" "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 { func (l *LoginExecutor) Execute() error {
var err error var err error

View file

@ -1,51 +1,7 @@
package executor 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 { 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 return nil
} }

View file

@ -1,40 +1,18 @@
package executor package executor
import ( import (
"flag"
"fmt" "fmt"
"codeflow.dananglin.me.uk/apollo/enbas/internal/config" "codeflow.dananglin.me.uk/apollo/enbas/internal/config"
"codeflow.dananglin.me.uk/apollo/enbas/internal/printer"
) )
type WhoAmIExecutor struct { func (e *WhoamiExecutor) Execute() error {
*flag.FlagSet config, err := config.NewCredentialsConfigFromFile(e.config.CredentialsFile)
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)
if err != nil { if err != nil {
return fmt.Errorf("unable to load the credential config: %w", err) 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 return nil
} }

View file

@ -1,6 +1,6 @@
package internal 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 ( const (
ApplicationName = "enbas" ApplicationName = "enbas"