parameterAddToHeaderOrQuery adds the provided object to the request header or url query supporting deep object syntax
(headerOrQueryParams interface{}, keyPrefix string, obj interface{}, collectionType string)
| 157 | // parameterAddToHeaderOrQuery adds the provided object to the request header or url query |
| 158 | // supporting deep object syntax |
| 159 | func parameterAddToHeaderOrQuery(headerOrQueryParams interface{}, keyPrefix string, obj interface{}, collectionType string) { |
| 160 | var v = reflect.ValueOf(obj) |
| 161 | var value = "" |
| 162 | if v == reflect.ValueOf(nil) { |
| 163 | value = "null" |
| 164 | } else { |
| 165 | switch v.Kind() { |
| 166 | case reflect.Invalid: |
| 167 | value = "invalid" |
| 168 | |
| 169 | case reflect.Struct: |
| 170 | if t, ok := obj.(MappedNullable); ok { |
| 171 | dataMap, err := t.ToMap() |
| 172 | if err != nil { |
| 173 | return |
| 174 | } |
| 175 | parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, dataMap, collectionType) |
| 176 | return |
| 177 | } |
| 178 | if t, ok := obj.(time.Time); ok { |
| 179 | parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, t.Format(time.RFC3339), collectionType) |
| 180 | return |
| 181 | } |
| 182 | value = v.Type().String() + " value" |
| 183 | case reflect.Slice: |
| 184 | var indValue = reflect.ValueOf(obj) |
| 185 | if indValue == reflect.ValueOf(nil) { |
| 186 | return |
| 187 | } |
| 188 | var lenIndValue = indValue.Len() |
| 189 | for i := 0; i < lenIndValue; i++ { |
| 190 | var arrayValue = indValue.Index(i) |
| 191 | parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, arrayValue.Interface(), collectionType) |
| 192 | } |
| 193 | return |
| 194 | |
| 195 | case reflect.Map: |
| 196 | var indValue = reflect.ValueOf(obj) |
| 197 | if indValue == reflect.ValueOf(nil) { |
| 198 | return |
| 199 | } |
| 200 | iter := indValue.MapRange() |
| 201 | for iter.Next() { |
| 202 | k, v := iter.Key(), iter.Value() |
| 203 | parameterAddToHeaderOrQuery(headerOrQueryParams, fmt.Sprintf("%s[%s]", keyPrefix, k.String()), v.Interface(), collectionType) |
| 204 | } |
| 205 | return |
| 206 | |
| 207 | case reflect.Interface: |
| 208 | fallthrough |
| 209 | case reflect.Ptr: |
| 210 | parameterAddToHeaderOrQuery(headerOrQueryParams, keyPrefix, v.Elem().Interface(), collectionType) |
| 211 | return |
| 212 | |
| 213 | case reflect.Int, reflect.Int8, reflect.Int16, |
| 214 | reflect.Int32, reflect.Int64: |
| 215 | value = strconv.FormatInt(v.Int(), 10) |
| 216 | case reflect.Uint, reflect.Uint8, reflect.Uint16, |