allow to override Struct on Save/Load/Init
Signed-off-by: Vasiliy Tolstov <v.tolstov@unistack.org>
This commit is contained in:
parent
26991e2ea2
commit
d6cba44b60
48
flag.go
48
flag.go
@ -43,11 +43,24 @@ func (c *flagConfig) Init(opts ...config.Option) error {
|
|||||||
for _, o := range opts {
|
for _, o := range opts {
|
||||||
o(&c.opts)
|
o(&c.opts)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := config.DefaultBeforeInit(c.opts.Context, c); err != nil && !c.opts.AllowFail {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
c.configure()
|
c.configure()
|
||||||
|
|
||||||
fields, err := rutil.StructFields(c.opts.Struct)
|
fields, err := rutil.StructFields(c.opts.Struct)
|
||||||
if err != nil {
|
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 {
|
for _, sf := range fields {
|
||||||
@ -84,10 +97,13 @@ func (c *flagConfig) Init(opts ...config.Option) error {
|
|||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.opts.Logger.Errorf(c.opts.Context, "flag init error: %v", err)
|
|
||||||
if !c.opts.AllowFail {
|
if !c.opts.AllowFail {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
if err := config.DefaultAfterInit(c.opts.Context, c); err != nil && !c.opts.AllowFail {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -120,26 +136,52 @@ func (c *flagConfig) Init(opts ...config.Option) error {
|
|||||||
err = c.flagMap(sf.Value, fn, fv, fd)
|
err = c.flagMap(sf.Value, fn, fv, fd)
|
||||||
}
|
}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c.opts.Logger.Errorf(c.opts.Context, "flag init error: %v", err)
|
|
||||||
if !c.opts.AllowFail {
|
if !c.opts.AllowFail {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := config.DefaultAfterInit(c.opts.Context, c); err != nil && !c.opts.AllowFail {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if err := config.DefaultAfterInit(c.opts.Context, c); err != nil && !c.opts.AllowFail {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *flagConfig) Load(ctx context.Context, opts ...config.LoadOption) error {
|
func (c *flagConfig) Load(ctx context.Context, opts ...config.LoadOption) error {
|
||||||
options := config.NewLoadOptions(opts...)
|
options := config.NewLoadOptions(opts...)
|
||||||
_ = options
|
_ = 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
|
// TODO: allow merge, append and so
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (c *flagConfig) Save(ctx context.Context, opts ...config.SaveOption) error {
|
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
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user