Merge 7b6e87b44e096ba2f46e3e60737573b73f38acc0 into 626d55b0c02937645c21774cacc021713de88604

This commit is contained in:
Ather Shu 2024-06-23 08:13:02 +08:00 committed by GitHub
commit 4a007454cf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 6 additions and 6 deletions

View File

@ -75,11 +75,11 @@ func (form formSource) TrySet(value reflect.Value, field reflect.StructField, ta
} }
func mappingByPtr(ptr any, setter setter, tag string) error { func mappingByPtr(ptr any, setter setter, tag string) error {
_, err := mapping(reflect.ValueOf(ptr), emptyField, setter, tag) _, err := mapping(reflect.ValueOf(ptr), &emptyField, setter, tag)
return err return err
} }
func mapping(value reflect.Value, field reflect.StructField, setter setter, tag string) (bool, error) { func mapping(value reflect.Value, field *reflect.StructField, setter setter, tag string) (bool, error) {
if field.Tag.Get(tag) == "-" { // just ignoring this field if field.Tag.Get(tag) == "-" { // just ignoring this field
return false, nil return false, nil
} }
@ -97,14 +97,14 @@ func mapping(value reflect.Value, field reflect.StructField, setter setter, tag
if err != nil { if err != nil {
return false, err return false, err
} }
if isNew && isSet { if isNew && (isSet || field == &emptyField) {
value.Set(vPtr) value.Set(vPtr)
} }
return isSet, nil return isSet, nil
} }
if vKind != reflect.Struct || !field.Anonymous { if vKind != reflect.Struct || !field.Anonymous {
ok, err := tryToSetValue(value, field, setter, tag) ok, err := tryToSetValue(value, *field, setter, tag)
if err != nil { if err != nil {
return false, err return false, err
} }
@ -122,7 +122,7 @@ func mapping(value reflect.Value, field reflect.StructField, setter setter, tag
if sf.PkgPath != "" && !sf.Anonymous { // unexported if sf.PkgPath != "" && !sf.Anonymous { // unexported
continue continue
} }
ok, err := mapping(value.Field(i), sf, setter, tag) ok, err := mapping(value.Field(i), &sf, setter, tag)
if err != nil { if err != nil {
return false, err return false, err
} }

View File

@ -58,7 +58,7 @@ func TestMappingBaseTypes(t *testing.T) {
field := val.Elem().Type().Field(0) field := val.Elem().Type().Field(0)
_, err := mapping(val, emptyField, formSource{field.Name: {tt.form}}, "form") _, err := mapping(val, &emptyField, formSource{field.Name: {tt.form}}, "form")
assert.NoError(t, err, testName) assert.NoError(t, err, testName)
actual := val.Elem().Field(0).Interface() actual := val.Elem().Field(0).Interface()