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

Function parameterAddToHeaderOrQuery

pkg/httpclient/client.go:158–245  ·  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

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

Calls 10

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

Tested by

no test coverage detected