spruce/main.go
Dan Anglin 2a6cc07624
fix: use slog for logging
- Created a new slog logger for logging.
- Optionally enable verbose logging when generating the PDF document.
2023-08-12 12:02:44 +01:00

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