diff --git a/file.go b/file.go index d162360..2225cfc 100644 --- a/file.go +++ b/file.go @@ -50,7 +50,7 @@ func (c *fileConfig) Init(opts ...config.Option) error { return nil } -func (c *fileConfig) Load(ctx context.Context) error { +func (c *fileConfig) Load(ctx context.Context, opts ...config.LoadOption) error { for _, fn := range c.opts.BeforeLoad { if err := fn(ctx, c); err != nil && !c.opts.AllowFail { return err @@ -69,7 +69,15 @@ func (c *fileConfig) Load(ctx context.Context) error { if err == nil { err = c.opts.Codec.Unmarshal(buf, src) if err == nil { - err = mergo.Merge(c.opts.Struct, src, mergo.WithOverride, mergo.WithTypeCheck, mergo.WithAppendSlice) + options := config.NewLoadOptions(opts...) + mopts := []func(*mergo.Config){mergo.WithTypeCheck} + if options.Override { + mopts = append(mopts, mergo.WithOverride) + } + if options.Append { + mopts = append(mopts, mergo.WithAppendSlice) + } + err = mergo.Merge(c.opts.Struct, src, mopts...) } } } @@ -87,7 +95,7 @@ func (c *fileConfig) Load(ctx context.Context) error { return nil } -func (c *fileConfig) Save(ctx context.Context) error { +func (c *fileConfig) Save(ctx context.Context, opts ...config.SaveOption) error { for _, fn := range c.opts.BeforeSave { if err := fn(ctx, c); err != nil && !c.opts.AllowFail { return err diff --git a/go.mod b/go.mod index af9e94d..23cf5c8 100644 --- a/go.mod +++ b/go.mod @@ -4,5 +4,5 @@ go 1.16 require ( github.com/imdario/mergo v0.3.12 - github.com/unistack-org/micro/v3 v3.3.17 + github.com/unistack-org/micro/v3 v3.4.0 ) diff --git a/go.sum b/go.sum index d490443..3e10b38 100644 --- a/go.sum +++ b/go.sum @@ -5,9 +5,9 @@ github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU= github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/patrickmn/go-cache v2.1.0+incompatible/go.mod h1:3Qf8kWWT7OJRJbdiICTKqZju1ZixQ/KpMGzzAfe6+WQ= github.com/silas/dag v0.0.0-20210121180416-41cf55125c34/go.mod h1:7RTUFBdIRC9nZ7/3RyRNH1bdqIShrDejd1YbLwgPS+I= -github.com/unistack-org/micro/v3 v3.3.17 h1:WcyS7InP0DlS/JpRQGLh5sG6VstkdHJbgpMp+gmHmwg= -github.com/unistack-org/micro/v3 v3.3.17/go.mod h1:022EOEZZ789hZY3yB5ZSMXU6jLiadBgcNB/cpediV3c= -golang.org/x/net v0.0.0-20210423184538-5f58ad60dda6/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= +github.com/unistack-org/micro/v3 v3.4.0 h1:z9F3lgAb2j4cZ1ib5qBj66JPYUAzR4sNIJqUDjVwyVQ= +github.com/unistack-org/micro/v3 v3.4.0/go.mod h1:LXmPfbJnJNvL0kQs8HfnkV3Wya2Wb+C7keVq++RCZnk= +golang.org/x/net v0.0.0-20210510120150-4163338589ed/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=