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:
		@ -239,6 +239,11 @@ func setWithProperType(val string, value reflect.Value, field reflect.StructFiel
 | 
			
		||||
		return json.Unmarshal(bytesconv.StringToBytes(val), value.Addr().Interface())
 | 
			
		||||
	case reflect.Map:
 | 
			
		||||
		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:
 | 
			
		||||
		return errUnknownType
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
@ -269,6 +269,39 @@ func TestMappingStructField(t *testing.T) {
 | 
			
		||||
	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) {
 | 
			
		||||
	var s struct {
 | 
			
		||||
		M map[string]int
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user