Added deserialize for map

gql_cataclysm
noah metz 2023-09-05 10:48:04 -06:00
parent b766aadef9
commit fa5facc5fc
1 changed files with 24 additions and 1 deletions

@ -764,7 +764,30 @@ func NewContext(db * badger.DB, log Logger) (*Context, error) {
reflect_value := reflect.MakeMap(reflect_type)
return reflect_type, &reflect_value, new_value, nil
} else {
return nil, nil, value, fmt.Errorf("deserialize map with elements unimplemented")
// TODO: basically copy above except instead of getting the key/elem type once, get key/elem values for map_size
tmp_value := value
var map_value reflect.Value
var map_type reflect.Type = nil
for i := 0; i < int(map_size); i += 1 {
tmp_value.TypeStack = value.TypeStack
var key_type, elem_type reflect.Type
var key_value, elem_value *reflect.Value
var err error
key_type, key_value, tmp_value, err = DeserializeValue(ctx, tmp_value)
if err != nil {
return nil, nil, value, err
}
elem_type, elem_value, tmp_value, err = DeserializeValue(ctx, tmp_value)
if err != nil {
return nil, nil, value, err
}
if map_type == nil {
map_type = reflect.MapOf(key_type, elem_type)
map_value = reflect.MakeMap(map_type)
}
map_value.SetMapIndex(*key_value, *elem_value)
}
return map_type, &map_value, tmp_value, nil
}
}
})