From 8182cb008a60705b06a4bccda760d903a010e75e Mon Sep 17 00:00:00 2001 From: Vasiliy Tolstov Date: Mon, 15 Jan 2024 00:46:00 +0300 Subject: [PATCH] config: add conditions Signed-off-by: Vasiliy Tolstov --- config/default.go | 12 ++++++++++-- config/options.go | 4 ++++ 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/config/default.go b/config/default.go index 53175018..4b01dfec 100644 --- a/config/default.go +++ b/config/default.go @@ -7,8 +7,8 @@ import ( "strings" "time" - "github.com/google/uuid" "dario.cat/mergo" + "github.com/google/uuid" "go.unistack.org/micro/v4/options" mid "go.unistack.org/micro/v4/util/id" rutil "go.unistack.org/micro/v4/util/reflect" @@ -40,6 +40,10 @@ func (c *defaultConfig) Init(opts ...options.Option) error { } func (c *defaultConfig) Load(ctx context.Context, opts ...options.Option) error { + if c.opts.SkipLoad != nil && c.opts.SkipLoad(ctx, c) { + return nil + } + if err := DefaultBeforeLoad(ctx, c); err != nil && !c.opts.AllowFail { return err } @@ -292,7 +296,11 @@ func fillValues(valueOf reflect.Value, tname string) error { return nil } -func (c *defaultConfig) Save(ctx context.Context, opts ...options.Option) error { +func (c *defaultConfig) Save(ctx context.Context, _ ...options.Option) error { + if c.opts.SkipSave != nil && c.opts.SkipSave(ctx, c) { + return nil + } + if err := DefaultBeforeSave(ctx, c); err != nil { return err } diff --git a/config/options.go b/config/options.go index eaa8b15e..87c99fc3 100644 --- a/config/options.go +++ b/config/options.go @@ -43,6 +43,10 @@ type Options struct { AfterInit []func(context.Context, Config) error // AllowFail flag to allow fail in config source AllowFail bool + // SkipLoad runs only if condition returns true + SkipLoad func(context.Context, Config) bool + // SkipSave runs only if condition returns true + SkipSave func(context.Context, Config) bool } // NewOptions new options struct with filed values