chore: refactor code (#1708)
This commit is contained in:
@@ -448,10 +448,12 @@ func (u *Unmarshaler) fillSlice(fieldType reflect.Type, value reflect.Value, map
|
|||||||
dereffedBaseType := Deref(baseType)
|
dereffedBaseType := Deref(baseType)
|
||||||
dereffedBaseKind := dereffedBaseType.Kind()
|
dereffedBaseKind := dereffedBaseType.Kind()
|
||||||
refValue := reflect.ValueOf(mapValue)
|
refValue := reflect.ValueOf(mapValue)
|
||||||
conv := reflect.MakeSlice(reflect.SliceOf(baseType), refValue.Len(), refValue.Cap())
|
if refValue.IsNil() {
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
// support for empty slice
|
conv := reflect.MakeSlice(reflect.SliceOf(baseType), refValue.Len(), refValue.Cap())
|
||||||
if !refValue.IsNil() && refValue.Len() == 0 {
|
if refValue.Len() == 0 {
|
||||||
value.Set(conv)
|
value.Set(conv)
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -198,6 +198,49 @@ func TestUnmarshalIntWithDefault(t *testing.T) {
|
|||||||
assert.Equal(t, 1, in.Int)
|
assert.Equal(t, 1, in.Int)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestUnmarshalBoolSliceRequired(t *testing.T) {
|
||||||
|
type inner struct {
|
||||||
|
Bools []bool `key:"bools"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var in inner
|
||||||
|
assert.NotNil(t, UnmarshalKey(map[string]interface{}{}, &in))
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUnmarshalBoolSliceNil(t *testing.T) {
|
||||||
|
type inner struct {
|
||||||
|
Bools []bool `key:"bools,optional"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var in inner
|
||||||
|
assert.Nil(t, UnmarshalKey(map[string]interface{}{}, &in))
|
||||||
|
assert.Nil(t, in.Bools)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUnmarshalBoolSliceNilExplicit(t *testing.T) {
|
||||||
|
type inner struct {
|
||||||
|
Bools []bool `key:"bools,optional"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var in inner
|
||||||
|
assert.Nil(t, UnmarshalKey(map[string]interface{}{
|
||||||
|
"bools": nil,
|
||||||
|
}, &in))
|
||||||
|
assert.Nil(t, in.Bools)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestUnmarshalBoolSliceEmpty(t *testing.T) {
|
||||||
|
type inner struct {
|
||||||
|
Bools []bool `key:"bools,optional"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var in inner
|
||||||
|
assert.Nil(t, UnmarshalKey(map[string]interface{}{
|
||||||
|
"bools": []bool{},
|
||||||
|
}, &in))
|
||||||
|
assert.Empty(t, in.Bools)
|
||||||
|
}
|
||||||
|
|
||||||
func TestUnmarshalBoolSliceWithDefault(t *testing.T) {
|
func TestUnmarshalBoolSliceWithDefault(t *testing.T) {
|
||||||
type inner struct {
|
type inner struct {
|
||||||
Bools []bool `key:"bools,default=[true,false]"`
|
Bools []bool `key:"bools,default=[true,false]"`
|
||||||
|
|||||||
Reference in New Issue
Block a user