fix: The validation of tag "options" is not working with int/uint type (#1969)

This commit is contained in:
taobig
2022-06-05 11:51:43 +08:00
committed by GitHub
parent c44edd7cac
commit 3fa8c5940d
2 changed files with 18 additions and 0 deletions

View File

@@ -253,6 +253,10 @@ func (u *Unmarshaler) processFieldPrimitiveWithJSONNumber(field reflect.StructFi
return err
}
if err := validateValueInOptions(opts.options(), v); err != nil {
return err
}
if fieldKind == reflect.Ptr {
value = value.Elem()
}

View File

@@ -1170,6 +1170,20 @@ func TestUnmarshalWithIntOptionsIncorrect(t *testing.T) {
assert.NotNil(t, UnmarshalKey(m, &in))
}
func TestUnmarshalWithJsonNumberOptionsIncorrect(t *testing.T) {
type inner struct {
Value string `key:"value,options=first|second"`
Incorrect int `key:"incorrect,options=1|2"`
}
m := map[string]interface{}{
"value": "first",
"incorrect": json.Number("3"),
}
var in inner
assert.NotNil(t, UnmarshalKey(m, &in))
}
func TestUnmarshalWithUintOptionsCorrect(t *testing.T) {
type inner struct {
Value string `key:"value,options=first|second"`