diff --git a/flag.go b/flag.go index a98e11d..b89a278 100644 --- a/flag.go +++ b/flag.go @@ -43,11 +43,24 @@ func (c *flagConfig) Init(opts ...config.Option) error { for _, o := range opts { o(&c.opts) } + + if err := config.DefaultBeforeInit(c.opts.Context, c); err != nil && !c.opts.AllowFail { + return err + } + c.configure() fields, err := rutil.StructFields(c.opts.Struct) if err != nil { - return err + if !c.opts.AllowFail { + return err + } + + if err := config.DefaultAfterInit(c.opts.Context, c); err != nil && !c.opts.AllowFail { + return err + } + + return nil } for _, sf := range fields { @@ -84,10 +97,13 @@ func (c *flagConfig) Init(opts ...config.Option) error { } if err != nil { - c.opts.Logger.Errorf(c.opts.Context, "flag init error: %v", err) if !c.opts.AllowFail { return err } + if err := config.DefaultAfterInit(c.opts.Context, c); err != nil && !c.opts.AllowFail { + return err + } + return nil } @@ -120,26 +136,52 @@ func (c *flagConfig) Init(opts ...config.Option) error { err = c.flagMap(sf.Value, fn, fv, fd) } if err != nil { - c.opts.Logger.Errorf(c.opts.Context, "flag init error: %v", err) if !c.opts.AllowFail { return err } + + if err := config.DefaultAfterInit(c.opts.Context, c); err != nil && !c.opts.AllowFail { + return err + } + return nil } } + if err := config.DefaultAfterInit(c.opts.Context, c); err != nil && !c.opts.AllowFail { + return err + } + return nil } func (c *flagConfig) Load(ctx context.Context, opts ...config.LoadOption) error { options := config.NewLoadOptions(opts...) _ = options + + if err := config.DefaultBeforeLoad(ctx, c); err != nil && !c.opts.AllowFail { + return err + } + + if err := config.DefaultAfterLoad(ctx, c); err != nil && !c.opts.AllowFail { + return err + } + // TODO: allow merge, append and so flag.Parse() + return nil } func (c *flagConfig) Save(ctx context.Context, opts ...config.SaveOption) error { + if err := config.DefaultBeforeSave(ctx, c); err != nil && !c.opts.AllowFail { + return err + } + + if err := config.DefaultAfterSave(ctx, c); err != nil && !c.opts.AllowFail { + return err + } + return nil } diff --git a/go.mod b/go.mod index 611debc..19bf822 100644 --- a/go.mod +++ b/go.mod @@ -1,5 +1,7 @@ module go.unistack.org/micro-config-flag/v3 -go 1.16 +go 1.18 -require go.unistack.org/micro/v3 v3.10.14 +require go.unistack.org/micro/v3 v3.10.16 + +require github.com/imdario/mergo v0.3.13 // indirect diff --git a/go.sum b/go.sum index 3687050..8ff5437 100644 --- a/go.sum +++ b/go.sum @@ -2,8 +2,8 @@ github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/silas/dag v0.0.0-20211117232152-9d50aa809f35/go.mod h1:7RTUFBdIRC9nZ7/3RyRNH1bdqIShrDejd1YbLwgPS+I= -go.unistack.org/micro/v3 v3.10.14 h1:7fgLpwGlCN67twhwtngJDEQvrMkUBDSA5vzZqxIDqNE= -go.unistack.org/micro/v3 v3.10.14/go.mod h1:uMAc0U/x7dmtICCrblGf0ZLgYegu3VwQAquu+OFCw1Q= +go.unistack.org/micro/v3 v3.10.16 h1:2er/SKKYbV60M+UuJM4eYCF0MZYAIq/yNUrAbTfgq8Q= +go.unistack.org/micro/v3 v3.10.16/go.mod h1:uMAc0U/x7dmtICCrblGf0ZLgYegu3VwQAquu+OFCw1Q= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=