Skip to content
Snippets Groups Projects
Commit f7e7aa34 authored by Danis Kirasirov's avatar Danis Kirasirov
Browse files

refactoring

parent ea8660ba
No related branches found
No related tags found
No related merge requests found
......@@ -16,7 +16,7 @@ type Encoder interface {
// NonStrictConverter определяет метод для преобразования данных в нестрогом режиме.
type NonStrictConverter interface {
NonStrictConverter(ctx context.Context, field *Field, v interface{}) interface{}
NonStrictConvert(ctx context.Context, field *Field, v interface{}) interface{}
}
type EncodeOptions struct {
......@@ -48,21 +48,23 @@ func Decode(ctx context.Context, w Walker, v interface{}, opts ...EncodeOption)
}
val, _, err := w.Walk(ctx, v, func(ctx context.Context, f *Field, v interface{}) (res WalkFuncResult, err error) {
decoder, ok := f.GetType().(Decoder)
if !ok {
res.Value = v
return res, nil
}
if opt.NonStrictMode {
if converter, ok := f.GetType().(NonStrictConverter); ok {
v = converter.NonStrictConverter(ctx, f, v)
if converter, hasConv := f.GetType().(NonStrictConverter); hasConv {
v = converter.NonStrictConvert(ctx, f, v)
}
}
if decoder, ok := f.GetType().(Decoder); ok {
if v, err = decoder.Decode(ctx, f, v); err != nil {
return
}
res.Value = v
res.Changed = true
if v, err = decoder.Decode(ctx, f, v); err != nil {
return
}
res.Value = v
res.Changed = true
return
}, walkOpts...)
......
......@@ -139,7 +139,7 @@ func (n NumberType) Encode(ctx context.Context, field *Field, v interface{}) (in
return n.decode(ctx, field, v)
}
func (NumberType) NonStrictConverter(_ context.Context, _ *Field, v interface{}) interface{} {
func (NumberType) NonStrictConvert(_ context.Context, _ *Field, v interface{}) interface{} {
if v == nil {
return nil
}
......
......@@ -58,7 +58,7 @@ func (StringType) Encode(_ context.Context, _ *Field, v interface{}) (interface{
return nil, fmt.Errorf("StringField encode error: unsupported value type : \"%s\"", reflect.ValueOf(v).Kind())
}
func (StringType) NonStrictConverter(_ context.Context, _ *Field, v interface{}) interface{} {
func (StringType) NonStrictConvert(_ context.Context, _ *Field, v interface{}) interface{} {
if v == nil {
return nil
}
......
......@@ -37,9 +37,9 @@ func WalkSchema() WalkOption {
}
}
// WalkNonStrict указывает что обход может выполняться в нестрогом режиме.
// При обходе по данным в случае несоответствия их типа будет выполнена
// попытка преобразования типа с использованием NonStrictConverter.
// WalkNonStrict указывает что обход выполняется в нестрогом режиме.
// В случае несоответствия типа данных ожидаемому, по возможности данные
// будут преобразованы в соответствии с ожидаемым типом.
func WalkNonStrict() WalkOption {
return func(opts *WalkOptions) {
opts.WalkNonStrict = true
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment