config: add conditions #287

Merged
vtolstov merged 1 commits from cond-config into master 2024-01-15 00:51:31 +03:00
2 changed files with 14 additions and 2 deletions

View File

@ -7,8 +7,8 @@ import (
"strings" "strings"
"time" "time"
"github.com/google/uuid"
"dario.cat/mergo" "dario.cat/mergo"
"github.com/google/uuid"
"go.unistack.org/micro/v4/options" "go.unistack.org/micro/v4/options"
mid "go.unistack.org/micro/v4/util/id" mid "go.unistack.org/micro/v4/util/id"
rutil "go.unistack.org/micro/v4/util/reflect" 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 { 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 { if err := DefaultBeforeLoad(ctx, c); err != nil && !c.opts.AllowFail {
return err return err
} }
@ -292,7 +296,11 @@ func fillValues(valueOf reflect.Value, tname string) error {
return nil 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 { if err := DefaultBeforeSave(ctx, c); err != nil {
return err return err
} }

View File

@ -43,6 +43,10 @@ type Options struct {
AfterInit []func(context.Context, Config) error AfterInit []func(context.Context, Config) error
// AllowFail flag to allow fail in config source // AllowFail flag to allow fail in config source
AllowFail bool 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 // NewOptions new options struct with filed values