Skip to content

Commit

Permalink
Merge 0d11490 into d13071e
Browse files Browse the repository at this point in the history
  • Loading branch information
shenqidebaozi authored Dec 4, 2023
2 parents d13071e + 0d11490 commit 729f48b
Show file tree
Hide file tree
Showing 6 changed files with 43 additions and 13 deletions.
12 changes: 6 additions & 6 deletions config/config.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,8 @@ import (
"sync"
"time"

"github.com/imdario/mergo"

// init encoding
_ "github.com/go-kratos/kratos/v2/encoding/json"
_ "github.com/go-kratos/kratos/v2/encoding/proto"
Expand All @@ -17,12 +19,7 @@ import (

var _ Config = (*config)(nil)

var (
// ErrNotFound is key not found.
ErrNotFound = errors.New("key not found")
// ErrTypeAssert is type assert error.
ErrTypeAssert = errors.New("type assert error")
)
var ErrNotFound = errors.New("key not found") // ErrNotFound is key not found.

// Observer is config observer.
type Observer func(string, Value)
Expand All @@ -49,6 +46,9 @@ func New(opts ...Option) Config {
o := options{
decoder: defaultDecoder,
resolver: defaultResolver,
merge: func(dst, src interface{}) error {
return mergo.Map(dst, src, mergo.WithOverride)
},
}
for _, opt := range opts {
opt(&o)
Expand Down
5 changes: 5 additions & 0 deletions config/config_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package config
import (
"errors"
"testing"

"github.com/imdario/mergo"
)

const (
Expand Down Expand Up @@ -131,6 +133,9 @@ func TestConfig(t *testing.T) {
sources: []Source{jSource},
decoder: defaultDecoder,
resolver: defaultResolver,
merge: func(dst, src interface{}) error {
return mergo.Map(dst, src, mergo.WithOverride)
},
}
cf := &config{}
cf.opts = opts
Expand Down
14 changes: 9 additions & 5 deletions config/options.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,6 @@ import (
"strings"

"github.com/go-kratos/kratos/v2/encoding"
"github.com/go-kratos/kratos/v2/log"
)

// Decoder is config decoder.
Expand All @@ -15,13 +14,17 @@ type Decoder func(*KeyValue, map[string]interface{}) error
// Resolver resolve placeholder in config.
type Resolver func(map[string]interface{}) error

// Merge is config merge func.
type Merge func(dst, src interface{}) error

// Option is config option.
type Option func(*options)

type options struct {
sources []Source
decoder Decoder
resolver Resolver
merge Merge
}

// WithSource with config source.
Expand Down Expand Up @@ -49,10 +52,11 @@ func WithResolver(r Resolver) Option {
}
}

// WithLogger with config logger.
// Deprecated: use global logger instead.
func WithLogger(_ log.Logger) Option {
return func(o *options) {}
// WithMergeFunc with config merge func.
func WithMergeFunc(m Merge) Option {
return func(o *options) {
o.merge = m
}
}

// defaultDecoder decode config from source KeyValue
Expand Down
11 changes: 11 additions & 0 deletions config/options_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -226,3 +226,14 @@ func TestExpand(t *testing.T) {
}
}
}

func TestWithMergeFunc(t *testing.T) {
c := &options{}
a := func(dst, src interface{}) error {
return nil
}
WithMergeFunc(a)(c)
if c.merge == nil {
t.Fatal("c.merge is nil")
}
}
3 changes: 1 addition & 2 deletions config/reader.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,6 @@ import (
"strings"
"sync"

"github.com/imdario/mergo"
"google.golang.org/protobuf/encoding/protojson"
"google.golang.org/protobuf/proto"

Expand Down Expand Up @@ -48,7 +47,7 @@ func (r *reader) Merge(kvs ...*KeyValue) error {
log.Errorf("Failed to config decode error: %v key: %s value: %s", err, kv.Key, string(kv.Value))
return err
}
if err := mergo.Map(&merged, convertMap(next), mergo.WithOverride); err != nil {
if err := r.opts.merge(&merged, convertMap(next)); err != nil {
log.Errorf("Failed to config merge error: %v key: %s value: %s", err, kv.Key, string(kv.Value))
return err
}
Expand Down
11 changes: 11 additions & 0 deletions config/reader_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ import (
"testing"

"github.com/go-kratos/kratos/v2/encoding"

"github.com/imdario/mergo"
)

func TestReader_Merge(t *testing.T) {
Expand All @@ -21,6 +23,9 @@ func TestReader_Merge(t *testing.T) {
return fmt.Errorf("unsupported key: %s format: %s", kv.Key, kv.Format)
},
resolver: defaultResolver,
merge: func(dst, src interface{}) error {
return mergo.Map(dst, src, mergo.WithOverride)
},
}
r := newReader(opts)
err = r.Merge(&KeyValue{
Expand Down Expand Up @@ -82,6 +87,9 @@ func TestReader_Value(t *testing.T) {
return fmt.Errorf("unsupported key: %s format: %s", kv.Key, kv.Format)
},
resolver: defaultResolver,
merge: func(dst, src interface{}) error {
return mergo.Map(dst, src, mergo.WithOverride)
},
}

ymlval := `
Expand Down Expand Up @@ -184,6 +192,9 @@ func TestReader_Source(t *testing.T) {
return fmt.Errorf("unsupported key: %s format: %s", kv.Key, kv.Format)
},
resolver: defaultResolver,
merge: func(dst, src interface{}) error {
return mergo.Map(dst, src, mergo.WithOverride)
},
}
r := newReader(opts)
err = r.Merge(&KeyValue{
Expand Down

0 comments on commit 729f48b

Please sign in to comment.