Dan Anglin
2a6cc07624
- Created a new slog logger for logging. - Optionally enable verbose logging when generating the PDF document.
62 lines
1.1 KiB
Go
62 lines
1.1 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
"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() {
|
|
logOptions := slog.HandlerOptions{
|
|
AddSource: false,
|
|
}
|
|
|
|
logger := slog.New(slog.NewTextHandler(os.Stdout, &logOptions))
|
|
|
|
slog.SetDefault(logger)
|
|
|
|
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 {
|
|
slog.Error("unknown subcommand", "subcommand", subcommand)
|
|
os.Exit(1)
|
|
}
|
|
|
|
if err := runner.Parse(os.Args[2:]); err != nil {
|
|
slog.Error(fmt.Sprintf("unable to parse the command line flags; %v.", err))
|
|
os.Exit(1)
|
|
}
|
|
|
|
if err := runner.Run(); err != nil {
|
|
slog.Error(fmt.Sprintf("unable to run '%s'; %v.", runner.Name(), err))
|
|
os.Exit(1)
|
|
}
|
|
}
|