github.com/vseinstrumentiru/lego@v1.0.2/internal/lego/config/config.go (about) 1 package config 2 3 import ( 4 "emperror.dev/errors" 5 "github.com/spf13/pflag" 6 "github.com/spf13/viper" 7 lego2 "github.com/vseinstrumentiru/lego/internal/lego" 8 "github.com/vseinstrumentiru/lego/internal/lego/build" 9 "github.com/vseinstrumentiru/lego/internal/lego/monitor" 10 "github.com/vseinstrumentiru/lego/internal/lego/transport/event" 11 "github.com/vseinstrumentiru/lego/internal/lego/transport/grpc" 12 "github.com/vseinstrumentiru/lego/internal/lego/transport/http" 13 "time" 14 ) 15 16 type WithSwitch = lego2.WithSwitch 17 18 type Config struct { 19 Name string 20 DataCenter string 21 Host string 22 Env string 23 Debug bool 24 Http http.Config 25 Grpc grpc.Config 26 Events event.Config 27 Monitor monitor.Config 28 ShutdownTimeout time.Duration 29 30 Build build.Info 31 Custom lego2.Config `mapstructure:"-"` 32 } 33 34 func (c Config) Validate() (err error) { 35 if c.Name == "" { 36 err = errors.Append(err, errors.New("srv.name required")) 37 } 38 39 err = errors.Append(err, c.Http.Validate()) 40 err = errors.Append(err, c.Grpc.Validate()) 41 err = errors.Append(err, c.Events.Validate()) 42 err = errors.Append(err, c.Monitor.Validate()) 43 44 if c.Custom != nil { 45 err = errors.Append(err, c.Custom.Validate()) 46 } 47 48 return 49 } 50 51 func (c Config) SetDefaults(env *viper.Viper, flag *pflag.FlagSet) { 52 env.SetDefault("srv.env", "dev") 53 env.SetDefault("srv.debug", false) 54 env.SetDefault("srv.host", "localhost") 55 env.SetDefault("srv.shutdownTimeout", 15*time.Second) 56 57 c.Http.SetDefaults(env, flag) 58 c.Grpc.SetDefaults(env, flag) 59 c.Events.SetDefaults(env, flag) 60 c.Monitor.SetDefaults(env, flag) 61 }