MCPcopy Create free account
hub / github.com/aws/smithy-go / decodeJSONObject

Method decodeJSONObject

document/json/decoder.go:288–335  ·  view source on GitHub ↗
(tv map[string]interface{}, rv reflect.Value)

Source from the content-addressed store, hash-verified

286}
287
288func (d *Decoder) decodeJSONObject(tv map[string]interface{}, rv reflect.Value) error {
289 switch rv.Kind() {
290 case reflect.Map:
291 t := rv.Type()
292 if t.Key().Kind() != reflect.String {
293 return &document.UnmarshalTypeError{Value: "map string key", Type: t.Key()}
294 }
295 if rv.IsNil() {
296 rv.Set(reflect.MakeMap(t))
297 }
298 case reflect.Struct:
299 if rv.CanInterface() && document.IsNoSerde(rv.Interface()) {
300 return &document.UnmarshalTypeError{
301 Value: fmt.Sprintf("unsupported type"),
302 Type: rv.Type(),
303 }
304 }
305 case reflect.Interface:
306 rv.Set(reflect.MakeMap(serde.ReflectTypeOf.MapStringToInterface))
307 rv = rv.Elem()
308 default:
309 return &document.UnmarshalTypeError{Value: "map", Type: rv.Type()}
310 }
311
312 if rv.Kind() == reflect.Map {
313 for k, kv := range tv {
314 key := reflect.New(rv.Type().Key()).Elem()
315 key.SetString(k)
316 elem := reflect.New(rv.Type().Elem()).Elem()
317 if err := d.decode(kv, elem, serde.Tag{}); err != nil {
318 return err
319 }
320 rv.SetMapIndex(key, elem)
321 }
322 } else if rv.Kind() == reflect.Struct {
323 fields := serde.GetStructFields(rv.Type())
324 for k, kv := range tv {
325 if f, ok := fields.FieldByName(k); ok {
326 fv := serde.DecoderFieldByIndex(rv, f.Index)
327 if err := d.decode(kv, fv, f.Tag); err != nil {
328 return err
329 }
330 }
331 }
332 }
333
334 return nil
335}
336
337func (d *Decoder) unsupportedType(jv interface{}, rv reflect.Value) error {
338 if rv.Kind() == reflect.Interface && rv.NumMethod() != 0 {

Callers 1

decodeMethod · 0.95

Calls 8

decodeMethod · 0.95
IsNoSerdeFunction · 0.92
GetStructFieldsFunction · 0.92
DecoderFieldByIndexFunction · 0.92
TypeMethod · 0.80
KeyMethod · 0.80
FieldByNameMethod · 0.80
SetMethod · 0.45

Tested by

no test coverage detected