@@ -289,6 +289,10 @@ func (u *Unmarshaler) generateMap(keyType, elemType reflect.Type, mapValue any)
|
|||||||
return reflect.ValueOf(mapValue), nil
|
return reflect.ValueOf(mapValue), nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if keyType != valueType.Key() {
|
||||||
|
return emptyValue, errTypeMismatch
|
||||||
|
}
|
||||||
|
|
||||||
refValue := reflect.ValueOf(mapValue)
|
refValue := reflect.ValueOf(mapValue)
|
||||||
targetValue := reflect.MakeMapWithSize(mapType, refValue.Len())
|
targetValue := reflect.MakeMapWithSize(mapType, refValue.Len())
|
||||||
dereffedElemType := Deref(elemType)
|
dereffedElemType := Deref(elemType)
|
||||||
|
|||||||
@@ -4437,3 +4437,18 @@ func TestFillDefaultUnmarshal(t *testing.T) {
|
|||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func Test_UnmarshalMap(t *testing.T) {
|
||||||
|
type Customer struct {
|
||||||
|
Names map[int]string `key:"names"`
|
||||||
|
}
|
||||||
|
|
||||||
|
input := map[string]any{
|
||||||
|
"names": map[string]any{
|
||||||
|
"19": "Tom",
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
|
var customer Customer
|
||||||
|
assert.ErrorIs(t, UnmarshalKey(input, &customer), errTypeMismatch)
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user