package cmd import ( "os" "git.devices.local/mawas/golang-api-skeleton/lib/config" "github.com/spf13/cobra" ) // TODO add shell completion func newRootCmd(appName string, appDescription string) *cobra.Command { return &cobra.Command{ Use: appName, Short: appDescription, Long: appDescription, // SilenceUsage: true, // SilenceErrors: true, DisableAutoGenTag: true, Run: func(cmd *cobra.Command, args []string) { }, } } func newVersionCmd(version string, appName string) *cobra.Command { return &cobra.Command{ Use: "version", Aliases: []string{"Version"}, Short: "Print the version number", Long: "Print the version number", DisableAutoGenTag: true, Run: func(cmd *cobra.Command, args []string) { cmd.Println(appName, "version", version) os.Exit(0) }, } } func newSampleCfgCmd() *cobra.Command { return &cobra.Command{ Use: "sample-config", Short: "Print sample config", Long: "Print an example configuration file content", Run: func(cmd *cobra.Command, args []string) { cmd.Println(config.Sample) os.Exit(0) }, } } func newSampleCLICmd() *cobra.Command { return &cobra.Command{ Use: "cli", Short: "Interactive CLI", Long: "Interactive CLI maybe", Run: func(cmd *cobra.Command, args []string) { cmd.Println("here might be an cli") os.Exit(0) }, } } func Initialize(version string, appName string, appDescription string) (string, map[string]interface{}, error) { var cfgFile string rootCmd := newRootCmd(appName, appDescription) rootCmd.SetHelpFunc(func(cmd *cobra.Command, args []string) { if err := cmd.Usage(); err != nil { os.Exit(1) } os.Exit(0) }) rootCmd.AddCommand(newVersionCmd(version, appName)) rootCmd.AddCommand(newSampleCfgCmd()) // rootCmd.AddCommand(newSampleCLICmd()) rootCmd.Flags().StringVarP(&cfgFile, "config", "c", "", "config file") flagCfg := map[string]interface{}{ "application.environment": rootCmd.Flags().StringP("environment", "e", "", "application environment"), "application.listenaddress": rootCmd.Flags().StringP("listenaddress", "l", "", "application listenaddress or host"), "application.port": rootCmd.Flags().IntP("port", "p", 0, "application listenport"), "database.host": rootCmd.Flags().StringP("database-host", "H", "", "database host"), "database.port": rootCmd.Flags().IntP("database-port", "P", 0, "database port"), "database.dialect": rootCmd.Flags().StringP("database-dialect", "D", "", "database dialect"), "database.database": rootCmd.Flags().StringP("database-name", "d", "", "database name"), "database.user": rootCmd.Flags().StringP("database-user", "u", "", "database user"), "database.password": rootCmd.Flags().StringP("database-password", "s", "", "database password"), "database.maxopenconn": rootCmd.Flags().IntP("database-maxopen", "o", 0, "database max open connections"), "database.maxidleconn": rootCmd.Flags().IntP("database-maxidle", "i", 0, "database max idle connections"), "database.maxlifetime": rootCmd.Flags().IntP("database-maxlifetime", "t", 0, "database max connection lifetime"), } if err := rootCmd.Execute(); err != nil { return cfgFile, flagCfg, err } return cfgFile, flagCfg, nil } // func Initialize(version string, appName string, appDescription string) error { // var cfgFile string // rootCmd := newRootCmd(appName, appDescription) // rootCmd.SetHelpFunc(func(cmd *cobra.Command, args []string) { // if err := cmd.Usage(); err != nil { // os.Exit(1) // } // os.Exit(0) // }) // rootCmd.AddCommand(newVersionCmd(version, appName)) // rootCmd.AddCommand(newSampleCfgCmd()) // // rootCmd.AddCommand(newSampleCLICmd()) // // rootCmd.Flags().StringVarP(&cfgFile, "config", "c", "", "config file") // flagCfg := map[string]interface{}{ // "application.environment": rootCmd.Flags().StringP("environment", "e", "", "application environment"), // "application.listenaddress": rootCmd.Flags().StringP("listenaddress", "l", "", "application listenaddress or host"), // "application.port": rootCmd.Flags().IntP("port", "p", 0, "application listenport"), // "database.host": rootCmd.Flags().StringP("database-host", "H", "", "database host"), // "database.port": rootCmd.Flags().IntP("database-port", "P", 0, "database port"), // "database.dialect": rootCmd.Flags().StringP("database-dialect", "D", "", "database dialect"), // "database.database": rootCmd.Flags().StringP("database-name", "d", "", "database name"), // "database.user": rootCmd.Flags().StringP("database-user", "u", "", "database user"), // "database.password": rootCmd.Flags().StringP("database-password", "s", "", "database password"), // "database.maxopenconn": rootCmd.Flags().IntP("database-maxopen", "o", 0, "database max open connections"), // "database.maxidleconn": rootCmd.Flags().IntP("database-maxidle", "i", 0, "database max idle connections"), // "database.maxlifetime": rootCmd.Flags().IntP("database-maxlifetime", "t", 0, "database max connection lifetime"), // } // if err := rootCmd.Execute(); err != nil { // return err // } // if err := config.Initialize(appName, cfgFile, flagCfg); err != nil { // return err // } // return nil // }