diff options
Diffstat (limited to 'app/cmd/root.go')
-rw-r--r-- | app/cmd/root.go | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/app/cmd/root.go b/app/cmd/root.go new file mode 100644 index 0000000..33c3642 --- /dev/null +++ b/app/cmd/root.go @@ -0,0 +1,52 @@ +package cmd + +import ( + "fmt" + "log/slog" + "os" + + "github.com/spf13/cobra" + "github.com/spf13/viper" +) + +var ( + cfgFile string + dbFile string + debug bool + rootCmd = &cobra.Command{Use: "gorum"} +) + +func init() { + cobra.OnInitialize(initLogger) + cobra.OnInitialize(initConfig) + rootCmd.PersistentFlags().StringVar(&cfgFile, "config", "gorum.yaml", "config file (default is 'gorum.yaml')") + rootCmd.PersistentFlags().StringVar(&dbFile, "db", "gorum.db", "database file (default is 'gorum.db')") + rootCmd.PersistentFlags().BoolVar(&debug, "debug", false, "verbose debug output") + viper.BindPFlag("db", serverCmd.Flags().Lookup("db")) +} + +func initLogger() { + level := slog.LevelInfo + if debug { + level = slog.LevelDebug + } + logger := slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{Level: level}) + slog.SetDefault(slog.New(logger)) +} + +func initConfig() { + viper.SetConfigFile(cfgFile) + + if err := viper.ReadInConfig(); err != nil { + slog.Warn("can't read config", slog.Any("error", err)) + } +} + +func Execute() { + rootCmd.AddCommand(serverCmd) + + if err := rootCmd.Execute(); err != nil { + fmt.Println(err) + os.Exit(1) + } +} |