MCPcopy
hub / github.com/ory/hydra / parameterAddToHeaderOrQuery

Function parameterAddToHeaderOrQuery

internal/httpclient/client.go:163–250  ·  view source on GitHub ↗

parameterAddToHeaderOrQuery adds the provided object to the request header or url query supporting deep object syntax

(headerOrQueryParams interface{}, keyPrefix string, obj interface{}, style string, collectionType string)

Source from the content-addressed store, hash-verified

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

Calls 10

TypeMethod · 0.80
ToMapMethod · 0.65
StringMethod · 0.65
LenMethod · 0.65
InterfaceMethod · 0.65
BoolMethod · 0.65
GetMethod · 0.65
AddMethod · 0.65
ValueMethod · 0.45
SetMethod · 0.45

Tested by

no test coverage detected