diff --git a/core/mapping/unmarshaler.go b/core/mapping/unmarshaler.go index b06385b4..277edc5e 100644 --- a/core/mapping/unmarshaler.go +++ b/core/mapping/unmarshaler.go @@ -250,8 +250,9 @@ func (u *Unmarshaler) fillSliceFromString(fieldType reflect.Type, value reflect. func (u *Unmarshaler) fillSliceValue(slice reflect.Value, index int, baseKind reflect.Kind, value any, fullName string) error { if value == nil { - return errUnsupportedType + return errNilSliceElement } + ithVal := slice.Index(index) switch v := value.(type) { case fmt.Stringer: diff --git a/core/mapping/unmarshaler_test.go b/core/mapping/unmarshaler_test.go index 18104537..d783670b 100644 --- a/core/mapping/unmarshaler_test.go +++ b/core/mapping/unmarshaler_test.go @@ -1340,7 +1340,7 @@ func TestUnmarshalNullableSlice(t *testing.T) { } ast := assert.New(t) - ast.Equal(UnmarshalKey(m, &v), errUnsupportedType) + ast.Equal(UnmarshalKey(m, &v), errNilSliceElement) } func TestUnmarshalIntSlice(t *testing.T) { diff --git a/core/mapping/utils.go b/core/mapping/utils.go index 67ea0ae3..d7c84af4 100644 --- a/core/mapping/utils.go +++ b/core/mapping/utils.go @@ -36,6 +36,7 @@ const ( var ( errUnsupportedType = errors.New("unsupported type on setting field value") errNumberRange = errors.New("wrong number range setting") + errNilSliceElement = errors.New("null element for slice") optionsCache = make(map[string]optionsCacheValue) cacheLock sync.RWMutex structRequiredCache = make(map[reflect.Type]requiredCacheValue)