package main import ( "log" "os" "codeflow.dananglin.me.uk/apollo/spruce/internal/cmd" ) type Runner interface { Parse([]string) error Name() string Run() error } var ( binaryVersion string buildTime string goVersion string gitCommit string ) func main() { commandMap := map[string]Runner{ "version": cmd.NewVersionCommand( binaryVersion, buildTime, goVersion, gitCommit, ), "generate": cmd.NewGenerateCommand(), "create": cmd.NewCreateCommand(), } subcommand := os.Args[1] runner, ok := commandMap[subcommand] if !ok { log.Fatalf("ERROR: unknown subcommand '%s'.", subcommand) } if err := runner.Parse(os.Args[2:]); err != nil { log.Fatalf("ERROR: unable to parse the command line flags; %v.", err) } if err := runner.Run(); err != nil { log.Fatalf("ERROR: unable to run '%s'; %v.", runner.Name(), err) } }