97 lines
1.9 KiB
Go
97 lines
1.9 KiB
Go
package atom
|
|
|
|
import (
|
|
"github.com/pkg/errors"
|
|
"github.com/rogeecn/atom/container"
|
|
"github.com/rogeecn/atom/providers/config"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
var cfgFile string
|
|
|
|
func Serve(providers container.Providers, opts ...Option) error {
|
|
var rootCmd = &cobra.Command{}
|
|
rootCmd.PersistentFlags().StringVarP(&cfgFile, "config", "c", "config.toml", "config file path")
|
|
|
|
for _, opt := range opts {
|
|
opt(rootCmd)
|
|
}
|
|
|
|
WithMigration(rootCmd)
|
|
WithModel(rootCmd)
|
|
WithSeeder(rootCmd)
|
|
|
|
// parse config files
|
|
configure, err := config.Load(cfgFile)
|
|
if err != nil {
|
|
return errors.Wrapf(err, "load config file: %s", cfgFile)
|
|
}
|
|
|
|
if err := providers.Provide(configure); err != nil {
|
|
return err
|
|
}
|
|
|
|
return rootCmd.Execute()
|
|
}
|
|
|
|
type Option func(*cobra.Command)
|
|
|
|
func Name(name string) Option {
|
|
return func(cmd *cobra.Command) {
|
|
cmd.Use = name
|
|
}
|
|
}
|
|
|
|
func Short(short string) Option {
|
|
return func(cmd *cobra.Command) {
|
|
cmd.Short = short
|
|
}
|
|
}
|
|
|
|
func Long(long string) Option {
|
|
return func(cmd *cobra.Command) {
|
|
cmd.Long = long
|
|
}
|
|
}
|
|
func Run(run func(cmd *cobra.Command, args []string)) Option {
|
|
return func(cmd *cobra.Command) {
|
|
cmd.Run = run
|
|
}
|
|
}
|
|
|
|
func RunE(run func(cmd *cobra.Command, args []string) error) Option {
|
|
return func(cmd *cobra.Command) {
|
|
cmd.RunE = run
|
|
}
|
|
}
|
|
|
|
func PostRun(run func(cmd *cobra.Command, args []string)) Option {
|
|
return func(cmd *cobra.Command) {
|
|
cmd.PostRun = run
|
|
}
|
|
}
|
|
|
|
func PostRunE(run func(cmd *cobra.Command, args []string) error) Option {
|
|
return func(cmd *cobra.Command) {
|
|
cmd.PostRunE = run
|
|
}
|
|
}
|
|
|
|
func PreRun(run func(cmd *cobra.Command, args []string)) Option {
|
|
return func(cmd *cobra.Command) {
|
|
cmd.PreRun = run
|
|
}
|
|
}
|
|
|
|
func PreRunE(run func(cmd *cobra.Command, args []string) error) Option {
|
|
return func(cmd *cobra.Command) {
|
|
cmd.PreRunE = run
|
|
}
|
|
}
|
|
|
|
func Config(file string) Option {
|
|
return func(cmd *cobra.Command) {
|
|
_ = cmd.PersistentFlags().Set("config", file)
|
|
}
|
|
}
|