The pointer support in url query params (using []*Struct for binding query params) was previously available in Gin, but was removed in commit 0d50ce8
since there wasn't a test case for such a scenario, and so the case block was removed as a redundant one.
This commit is contained in:
parent
49f45a5427
commit
44d0dd7092
@ -239,6 +239,11 @@ func setWithProperType(val string, value reflect.Value, field reflect.StructFiel
|
|||||||
return json.Unmarshal(bytesconv.StringToBytes(val), value.Addr().Interface())
|
return json.Unmarshal(bytesconv.StringToBytes(val), value.Addr().Interface())
|
||||||
case reflect.Map:
|
case reflect.Map:
|
||||||
return json.Unmarshal(bytesconv.StringToBytes(val), value.Addr().Interface())
|
return json.Unmarshal(bytesconv.StringToBytes(val), value.Addr().Interface())
|
||||||
|
case reflect.Ptr:
|
||||||
|
if !value.Elem().IsValid() {
|
||||||
|
value.Set(reflect.New(value.Type().Elem()))
|
||||||
|
}
|
||||||
|
return setWithProperType(val, value.Elem(), field)
|
||||||
default:
|
default:
|
||||||
return errUnknownType
|
return errUnknownType
|
||||||
}
|
}
|
||||||
|
@ -269,6 +269,39 @@ func TestMappingStructField(t *testing.T) {
|
|||||||
assert.Equal(t, 9, s.J.I)
|
assert.Equal(t, 9, s.J.I)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestMappingPtrField(t *testing.T) {
|
||||||
|
type ptrStruct struct {
|
||||||
|
Key int64 `json:"key"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type ptrRequest struct {
|
||||||
|
Items []*ptrStruct `json:"items" form:"items"`
|
||||||
|
}
|
||||||
|
|
||||||
|
var err error
|
||||||
|
|
||||||
|
// With 0 items.
|
||||||
|
var req0 ptrRequest
|
||||||
|
err = mappingByPtr(&req0, formSource{}, "form")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Empty(t, req0.Items)
|
||||||
|
|
||||||
|
// With 1 item.
|
||||||
|
var req1 ptrRequest
|
||||||
|
err = mappingByPtr(&req1, formSource{"items": {`{"key": 1}`}}, "form")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Len(t, req1.Items, 1)
|
||||||
|
assert.EqualValues(t, 1, req1.Items[0].Key)
|
||||||
|
|
||||||
|
// With 2 items.
|
||||||
|
var req2 ptrRequest
|
||||||
|
err = mappingByPtr(&req2, formSource{"items": {`{"key": 1}`, `{"key": 2}`}}, "form")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.Len(t, req2.Items, 2)
|
||||||
|
assert.EqualValues(t, 1, req2.Items[0].Key)
|
||||||
|
assert.EqualValues(t, 2, req2.Items[1].Key)
|
||||||
|
}
|
||||||
|
|
||||||
func TestMappingMapField(t *testing.T) {
|
func TestMappingMapField(t *testing.T) {
|
||||||
var s struct {
|
var s struct {
|
||||||
M map[string]int
|
M map[string]int
|
||||||
|
Loading…
Reference in New Issue
Block a user