Skip to content
This repository was archived by the owner on Jul 22, 2024. It is now read-only.

Commit f58aecc

Browse files
author
Pavel Ivanov
committed
fix: Temporary hack to fix tests (to be reviewed)
1 parent b5c931f commit f58aecc

1 file changed

Lines changed: 14 additions & 14 deletions

File tree

mapstructure.go

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -414,18 +414,18 @@ func NewDecoder(config *DecoderConfig) (*Decoder, error) {
414414
// Decode decodes the given raw interface to the target pointer specified
415415
// by the configuration.
416416
func (d *Decoder) Decode(input interface{}) error {
417-
return d.decode("", input, reflect.ValueOf(d.config.Result).Elem())
417+
return d.decode("", input, reflect.ValueOf(d.config.Result).Elem(), true)
418418
}
419419

420420
// Decodes an unknown data type into a specific reflection value.
421-
func (d *Decoder) decode(name string, input interface{}, outVal reflect.Value) error {
421+
func (d *Decoder) decode(name string, input interface{}, outVal reflect.Value, skipTypedNil bool) error {
422422
var inputVal reflect.Value
423423
if input != nil {
424424
inputVal = reflect.ValueOf(input)
425425

426426
// We need to check here if input is a typed nil. Typed nils won't
427427
// match the "input == nil" below so we check that here.
428-
if inputVal.Kind() == reflect.Ptr && inputVal.IsNil() {
428+
if skipTypedNil && inputVal.Kind() == reflect.Ptr && inputVal.IsNil() {
429429
input = nil
430430
}
431431
}
@@ -529,7 +529,7 @@ func (d *Decoder) decodeBasic(name string, data interface{}, val reflect.Value)
529529

530530
// Decode. If we have an error then return. We also return right
531531
// away if we're not a copy because that means we decoded directly.
532-
if err := d.decode(name, data, elem); err != nil || !copied {
532+
if err := d.decode(name, data, elem, true); err != nil || !copied {
533533
return err
534534
}
535535

@@ -842,7 +842,7 @@ func (d *Decoder) decodeMapFromSlice(name string, dataVal reflect.Value, val ref
842842
for i := 0; i < dataVal.Len(); i++ {
843843
err := d.decode(
844844
name+"["+strconv.Itoa(i)+"]",
845-
dataVal.Index(i).Interface(), val)
845+
dataVal.Index(i).Interface(), val, true)
846846
if err != nil {
847847
return err
848848
}
@@ -878,15 +878,15 @@ func (d *Decoder) decodeMapFromMap(name string, dataVal reflect.Value, val refle
878878

879879
// First decode the key into the proper type
880880
currentKey := reflect.Indirect(reflect.New(valKeyType))
881-
if err := d.decode(fieldName, k.Interface(), currentKey); err != nil {
881+
if err := d.decode(fieldName, k.Interface(), currentKey, true); err != nil {
882882
errors = appendErrors(errors, err)
883883
continue
884884
}
885885

886886
// Next decode the data into the proper type
887887
v := dataVal.MapIndex(k).Interface()
888888
currentVal := reflect.Indirect(reflect.New(valElemType))
889-
if err := d.decode(fieldName, v, currentVal); err != nil {
889+
if err := d.decode(fieldName, v, currentVal, true); err != nil {
890890
errors = appendErrors(errors, err)
891891
continue
892892
}
@@ -983,7 +983,7 @@ func (d *Decoder) decodeMapFromStruct(name string, dataVal reflect.Value, val re
983983
addrVal := reflect.New(vMap.Type())
984984
reflect.Indirect(addrVal).Set(vMap)
985985

986-
err := d.decode(keyName, x.Interface(), reflect.Indirect(addrVal))
986+
err := d.decode(keyName, x.Interface(), reflect.Indirect(addrVal), true)
987987
if err != nil {
988988
return err
989989
}
@@ -1002,7 +1002,7 @@ func (d *Decoder) decodeMapFromStruct(name string, dataVal reflect.Value, val re
10021002

10031003
default:
10041004
currentVal := reflect.Indirect(reflect.New(valMap.Type().Elem()))
1005-
err := d.decode(keyName, v.Interface(), currentVal)
1005+
err := d.decode(keyName, v.Interface(), currentVal, false)
10061006
if err != nil {
10071007
return err
10081008
}
@@ -1052,13 +1052,13 @@ func (d *Decoder) decodePtr(name string, data interface{}, val reflect.Value) (b
10521052
realVal = reflect.New(valElemType)
10531053
}
10541054

1055-
if err := d.decode(name, data, reflect.Indirect(realVal)); err != nil {
1055+
if err := d.decode(name, data, reflect.Indirect(realVal), true); err != nil {
10561056
return false, err
10571057
}
10581058

10591059
val.Set(realVal)
10601060
} else {
1061-
if err := d.decode(name, data, reflect.Indirect(val)); err != nil {
1061+
if err := d.decode(name, data, reflect.Indirect(val), true); err != nil {
10621062
return false, err
10631063
}
10641064
}
@@ -1141,7 +1141,7 @@ func (d *Decoder) decodeSlice(name string, data interface{}, val reflect.Value)
11411141
currentField := valSlice.Index(i)
11421142

11431143
fieldName := name + "[" + strconv.Itoa(i) + "]"
1144-
if err := d.decode(fieldName, currentData, currentField); err != nil {
1144+
if err := d.decode(fieldName, currentData, currentField, true); err != nil {
11451145
errors = appendErrors(errors, err)
11461146
}
11471147
}
@@ -1208,7 +1208,7 @@ func (d *Decoder) decodeArray(name string, data interface{}, val reflect.Value)
12081208
currentField := valArray.Index(i)
12091209

12101210
fieldName := name + "[" + strconv.Itoa(i) + "]"
1211-
if err := d.decode(fieldName, currentData, currentField); err != nil {
1211+
if err := d.decode(fieldName, currentData, currentField, true); err != nil {
12121212
errors = appendErrors(errors, err)
12131213
}
12141214
}
@@ -1413,7 +1413,7 @@ func (d *Decoder) decodeStructFromMap(name string, dataVal, val reflect.Value) e
14131413
fieldName = name + "." + fieldName
14141414
}
14151415

1416-
if err := d.decode(fieldName, rawMapVal.Interface(), fieldValue); err != nil {
1416+
if err := d.decode(fieldName, rawMapVal.Interface(), fieldValue, true); err != nil {
14171417
errors = appendErrors(errors, err)
14181418
}
14191419
}

0 commit comments

Comments
 (0)