(o *Object, dst reflect.Value, typ reflect.Type, ctx *objectExportCtx)
| 979 | } |
| 980 | |
| 981 | func genericExportToMap(o *Object, dst reflect.Value, typ reflect.Type, ctx *objectExportCtx) error { |
| 982 | dst.Set(reflect.MakeMap(typ)) |
| 983 | ctx.putTyped(o, typ, dst.Interface()) |
| 984 | keyTyp := typ.Key() |
| 985 | elemTyp := typ.Elem() |
| 986 | needConvertKeys := !reflectTypeString.AssignableTo(keyTyp) |
| 987 | iter := &enumerableIter{ |
| 988 | o: o, |
| 989 | wrapped: o.self.iterateStringKeys(), |
| 990 | } |
| 991 | r := o.runtime |
| 992 | for item, next := iter.next(); next != nil; item, next = next() { |
| 993 | var kv reflect.Value |
| 994 | var err error |
| 995 | if needConvertKeys { |
| 996 | kv = reflect.New(keyTyp).Elem() |
| 997 | err = r.toReflectValue(item.name, kv, ctx) |
| 998 | if err != nil { |
| 999 | return fmt.Errorf("could not convert map key %s to %v: %w", item.name.String(), typ, err) |
| 1000 | } |
| 1001 | } else { |
| 1002 | kv = reflect.ValueOf(item.name.String()) |
| 1003 | } |
| 1004 | |
| 1005 | ival := o.self.getStr(item.name.string(), nil) |
| 1006 | if ival != nil { |
| 1007 | vv := reflect.New(elemTyp).Elem() |
| 1008 | err = r.toReflectValue(ival, vv, ctx) |
| 1009 | if err != nil { |
| 1010 | return fmt.Errorf("could not convert map value %v to %v at key %s: %w", ival, typ, item.name.String(), err) |
| 1011 | } |
| 1012 | dst.SetMapIndex(kv, vv) |
| 1013 | } else { |
| 1014 | dst.SetMapIndex(kv, reflect.Zero(elemTyp)) |
| 1015 | } |
| 1016 | } |
| 1017 | |
| 1018 | return nil |
| 1019 | } |
| 1020 | |
| 1021 | func (o *baseObject) exportToMap(m reflect.Value, typ reflect.Type, ctx *objectExportCtx) error { |
| 1022 | return genericExportToMap(o.val, m, typ, ctx) |
no test coverage detected
searching dependent graphs…