From 822cf17bf93acae554a0241c466b96915dd659a9 Mon Sep 17 00:00:00 2001 From: Pratham Gadkari Date: Sun, 30 Nov 2025 16:10:58 +0530 Subject: [PATCH] modifying setArray and setSlice --- binding/form_mapping.go | 6 ++++++ binding/form_mapping_test.go | 32 ++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/binding/form_mapping.go b/binding/form_mapping.go index 6a07330a..1067ca21 100644 --- a/binding/form_mapping.go +++ b/binding/form_mapping.go @@ -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 { 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) if err != nil { return err diff --git a/binding/form_mapping_test.go b/binding/form_mapping_test.go index 8437c69b..6c1df3cc 100644 --- a/binding/form_mapping_test.go +++ b/binding/form_mapping_test.go @@ -760,3 +760,35 @@ func TestTrySetCustomNotApplicable(t *testing.T) { require.NoError(t, err) 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) +}