mirror of
https://github.com/gin-gonic/gin.git
synced 2025-12-13 13:12:17 +08:00
modifying setArray and setSlice
This commit is contained in:
parent
6b6ac46ae3
commit
822cf17bf9
@ -468,6 +468,12 @@ func setTimeField(val string, structField reflect.StructField, value reflect.Val
|
|||||||
|
|
||||||
func setArray(vals []string, value reflect.Value, field reflect.StructField) error {
|
func setArray(vals []string, value reflect.Value, field reflect.StructField) error {
|
||||||
for i, s := range vals {
|
for i, s := range vals {
|
||||||
|
if ok, err := trySetCustom(s, value.Index(i)); ok {
|
||||||
|
if err != nil {
|
||||||
|
return fmt.Errorf("field %q: %w", field.Name, err)
|
||||||
|
}
|
||||||
|
continue
|
||||||
|
}
|
||||||
err := setWithProperType(s, value.Index(i), field)
|
err := setWithProperType(s, value.Index(i), field)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
|||||||
@ -760,3 +760,35 @@ func TestTrySetCustomNotApplicable(t *testing.T) {
|
|||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
assert.Equal(t, 42, s.N)
|
assert.Equal(t, 42, s.N)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestTrySetCustomIntegrationSuccess(t *testing.T) {
|
||||||
|
var s struct {
|
||||||
|
F testCustom `form:"f"`
|
||||||
|
}
|
||||||
|
|
||||||
|
err := mappingByPtr(&s, formSource{"f": {"hello"}}, "form")
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, "prefix_hello", s.F.Value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTrySetCustomSlice(t *testing.T) {
|
||||||
|
var s struct {
|
||||||
|
F []testCustom `form:"f"`
|
||||||
|
}
|
||||||
|
|
||||||
|
err := mappingByPtr(&s, formSource{"f": {"one", "two"}}, "form")
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, "prefix_one", s.F[0].Value)
|
||||||
|
assert.Equal(t, "prefix_two", s.F[1].Value)
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestTrySetCustomArray(t *testing.T) {
|
||||||
|
var s struct {
|
||||||
|
F [2]testCustom `form:"f"`
|
||||||
|
}
|
||||||
|
|
||||||
|
err := mappingByPtr(&s, formSource{"f": {"hello", "world"}}, "form")
|
||||||
|
require.NoError(t, err)
|
||||||
|
assert.Equal(t, "prefix_hello", s.F[0].Value)
|
||||||
|
assert.Equal(t, "prefix_world", s.F[1].Value)
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user