@@ -21,10 +21,10 @@ type FormParam struct {
21
21
}
22
22
23
23
type formParam struct {
24
- Key string
25
- Value any
26
- Headers http.Header
27
- ArraySerializationOption ArraySerializationOption
24
+ key string
25
+ value any
26
+ headers http.Header
27
+ arraySerializationOption ArraySerializationOption
28
28
}
29
29
30
30
type formParams []formParam
@@ -41,7 +41,7 @@ func (fp *FormParams) Add(formParam FormParam) {
41
41
42
42
// Add appends a FormParam to the FormParams collection.
43
43
func (fp * formParams ) add (formParam formParam ) {
44
- if formParam .Value != nil {
44
+ if formParam .value != nil {
45
45
* fp = append (* fp , formParam )
46
46
}
47
47
}
@@ -53,7 +53,7 @@ func (fp *formParams) prepareFormFields(form url.Values) error {
53
53
form = url.Values {}
54
54
}
55
55
for _ , param := range * fp {
56
- paramsMap , err := toMap (param .Key , param .Value , param .ArraySerializationOption )
56
+ paramsMap , err := toMap (param .key , param .value , param .arraySerializationOption )
57
57
if err != nil {
58
58
return err
59
59
}
@@ -72,22 +72,22 @@ func (fp *formParams) prepareMultipartFields() (bytes.Buffer, string, error) {
72
72
body := & bytes.Buffer {}
73
73
writer := multipart .NewWriter (body )
74
74
for _ , field := range * fp {
75
- switch fieldValue := field .Value .(type ) {
75
+ switch fieldValue := field .value .(type ) {
76
76
case FileWrapper :
77
77
mediaParam := map [string ]string {
78
- "name" : field .Key ,
78
+ "name" : field .key ,
79
79
"filename" : fieldValue .FileName ,
80
80
}
81
- formParamWriter (writer , field .Headers , mediaParam , fieldValue .File )
81
+ formParamWriter (writer , field .headers , mediaParam , fieldValue .File )
82
82
default :
83
- paramsMap , err := toMap (field .Key , field .Value , field .ArraySerializationOption )
83
+ paramsMap , err := toMap (field .key , field .value , field .arraySerializationOption )
84
84
if err != nil {
85
85
return * body , writer .FormDataContentType (), err
86
86
}
87
87
for key , values := range paramsMap {
88
88
mediaParam := map [string ]string {"name" : key }
89
89
for _ , value := range values {
90
- formParamWriter (writer , field .Headers , mediaParam , []byte (value ))
90
+ formParamWriter (writer , field .headers , mediaParam , []byte (value ))
91
91
}
92
92
}
93
93
}
@@ -119,25 +119,16 @@ func formParamWriter(
119
119
return nil
120
120
}
121
121
122
- func toMap (keyPrefix string , paramObj any , option ArraySerializationOption ) (map [string ][]string , error ) {
123
- if paramObj == nil {
122
+ func toMap (keyPrefix string , param any , option ArraySerializationOption ) (map [string ][]string , error ) {
123
+ if param == nil {
124
124
return map [string ][]string {}, nil
125
125
}
126
126
127
- var param any
128
- marshalBytes , err := json .Marshal (toStructPtr (paramObj ))
129
- if err == nil && reflect .TypeOf (paramObj ).Kind () != reflect .Map {
130
- err = json .Unmarshal (marshalBytes , & param )
131
- if err != nil {
132
- return map [string ][]string {}, nil
133
- }
134
- } else {
135
- param = paramObj
136
- }
137
-
138
127
switch reflect .TypeOf (param ).Kind () {
139
- case reflect .Struct , reflect . Ptr :
128
+ case reflect .Ptr :
140
129
return processStructAndPtr (keyPrefix , param , option )
130
+ case reflect .Struct :
131
+ return processStructAndPtr (keyPrefix , toStructPtr (param ), option )
141
132
case reflect .Map :
142
133
return processMap (keyPrefix , param , option )
143
134
case reflect .Slice :
@@ -148,11 +139,10 @@ func toMap(keyPrefix string, paramObj any, option ArraySerializationOption) (map
148
139
}
149
140
150
141
func processStructAndPtr (keyPrefix string , param any , option ArraySerializationOption ) (map [string ][]string , error ) {
151
- innerMap , err := structToMap (param )
152
- if err != nil {
153
- return nil , err
154
- }
155
- return toMap (keyPrefix , innerMap , option )
142
+ innerData , err := structToAny (param )
143
+ if err != nil { return nil , err }
144
+
145
+ return toMap (keyPrefix , innerData , option )
156
146
}
157
147
158
148
func processMap (keyPrefix string , param any , option ArraySerializationOption ) (map [string ][]string , error ) {
@@ -175,7 +165,7 @@ func processSlice(keyPrefix string, param any, option ArraySerializationOption)
175
165
result := make (map [string ][]string )
176
166
for i := 0 ; i < reflectValue .Len (); i ++ {
177
167
innerStruct := reflectValue .Index (i ).Interface ()
178
- var indexStr interface {}
168
+ var indexStr any
179
169
switch innerStruct .(type ) {
180
170
case bool , int , int8 , int16 , int32 , int64 , uint , uint8 , uint16 , uint32 , uint64 , float32 , float64 , complex64 , complex128 , string :
181
171
indexStr = nil
@@ -194,35 +184,32 @@ func processSlice(keyPrefix string, param any, option ArraySerializationOption)
194
184
195
185
func processDefault (keyPrefix string , param any ) (map [string ][]string , error ) {
196
186
var defaultValue string
197
- switch in := param .( type ) {
198
- case string :
199
- defaultValue = in
187
+ switch reflect . TypeOf ( param ). Kind ( ) {
188
+ case reflect . String :
189
+ defaultValue = fmt . Sprintf ( "%v" , param )
200
190
default :
201
- dataBytes , err := json .Marshal (in )
191
+ dataBytes , err := json .Marshal (param )
202
192
if err == nil {
203
193
defaultValue = string (dataBytes )
204
194
} else {
205
- defaultValue = fmt .Sprintf ("%v" , in )
195
+ defaultValue = fmt .Sprintf ("%v" , param )
206
196
}
207
197
}
208
198
return map [string ][]string {keyPrefix : {defaultValue }}, nil
209
199
}
210
200
211
- // structToMap converts a given data structure to a map.
212
- func structToMap (data any ) (map [string ]any , error ) {
213
- if reflect .TypeOf (data ).Kind () != reflect .Ptr {
214
- data = toStructPtr (data )
215
- }
201
+ // structToAny converts a given data structure into an any type.
202
+ func structToAny (data any ) (any , error ) {
216
203
dataBytes , err := json .Marshal (data )
217
204
if err != nil {
218
205
return nil , err
219
206
}
220
- mapData := make ( map [ string ] interface {})
221
- err = json .Unmarshal (dataBytes , & mapData )
222
- return mapData , err
207
+ var innerData any
208
+ err = json .Unmarshal (dataBytes , & innerData )
209
+ return innerData , err
223
210
}
224
211
225
- // Return a pointer to the supplied struct via interface{}
212
+ // Return a pointer to the supplied struct via any
226
213
func toStructPtr (obj any ) any {
227
214
// Create a new instance of the underlying type
228
215
vp := reflect .New (reflect .TypeOf (obj ))
0 commit comments