From a4209172b9b701436b225e5515e2d9a4772a4229 Mon Sep 17 00:00:00 2001 From: Muhammed Efe Cetin Date: Thu, 13 Feb 2025 17:33:40 +0300 Subject: [PATCH] bind: fix linter --- binder/form_test.go | 4 ++-- binder/mapping.go | 20 +++++++++++++++++--- docs/api/bind.md | 1 - 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/binder/form_test.go b/binder/form_test.go index 98526b5307..d961f87346 100644 --- a/binder/form_test.go +++ b/binder/form_test.go @@ -99,12 +99,12 @@ func Test_FormBinder_BindMultipart(t *testing.T) { } type User struct { + Avatar *multipart.FileHeader `form:"avatar"` Name string `form:"name"` Names []string `form:"names"` Posts []Post `form:"posts"` - Age int `form:"age"` - Avatar *multipart.FileHeader `form:"avatar"` Avatars []*multipart.FileHeader `form:"avatars"` + Age int `form:"age"` } var user User diff --git a/binder/mapping.go b/binder/mapping.go index 061929f4f0..bc95d02822 100644 --- a/binder/mapping.go +++ b/binder/mapping.go @@ -262,14 +262,28 @@ func formatBindData[T, K any](out any, data map[string][]T, key string, value K, switch v := any(value).(type) { case string: - assignBindData(out, any(data).(map[string][]string), key, v, enableSplitting) + dataMap, ok := any(data).(map[string][]string) + if !ok { + return fmt.Errorf("unsupported value type: %T", value) + } + + assignBindData(out, dataMap, key, v, enableSplitting) case []string: + dataMap, ok := any(data).(map[string][]string) + if !ok { + return fmt.Errorf("unsupported value type: %T", value) + } + for _, val := range v { - assignBindData(out, any(data).(map[string][]string), key, val, enableSplitting) + assignBindData(out, dataMap, key, val, enableSplitting) } case []*multipart.FileHeader: for _, val := range v { - data[key] = append(data[key], any(val).(T)) + valT, ok := any(val).(T) + if !ok { + return fmt.Errorf("unsupported value type: %T", value) + } + data[key] = append(data[key], valT) } default: return fmt.Errorf("unsupported value type: %T", value) diff --git a/docs/api/bind.md b/docs/api/bind.md index 973db0f295..eaad63050c 100644 --- a/docs/api/bind.md +++ b/docs/api/bind.md @@ -152,7 +152,6 @@ Run tests with the following `curl` command: curl -X POST -H "Content-Type: multipart/form-data" -F "name=john" -F "pass=doe" -F 'avatar=@filename' localhost:3000 ``` - ### JSON Binds the request JSON body to a struct.