Skip to content

Commit 68d84af

Browse files
committed
wip
1 parent f6b1026 commit 68d84af

File tree

2 files changed

+38
-17
lines changed

2 files changed

+38
-17
lines changed

assign_test.go

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -18,12 +18,12 @@ func TestAssign(t *testing.T) {
1818
err error
1919
run func(v interface{})
2020
}{
21-
{"/nested/str", "strval", nil, func(val interface{}) {
22-
assert.Equal(val, r.Nested.String)
23-
}},
24-
{"/nestedptr/str", "x", nil, func(val interface{}) {
25-
assert.Equal(val, r.NestedPtr.String)
26-
}},
21+
// {"/nested/str", "strval", nil, func(val interface{}) {
22+
// assert.Equal(val, r.Nested.String)
23+
// }},
24+
// {"/nestedptr/str", "x", nil, func(val interface{}) {
25+
// assert.Equal(val, r.NestedPtr.String)
26+
// }},
2727
{"/nested/entrymap/keyval/name", "entry-name", nil, func(v interface{}) {
2828
assert.Contains(r.Nested.EntryMap, "keyval")
2929
assert.Equal("entry-name", r.Nested.EntryMap["keyval"].Name)

state.go

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -249,6 +249,7 @@ func (s *state) assign(dst reflect.Value, value reflect.Value) (reflect.Value, e
249249

250250
// TODO: deref the current pointer and use that instead
251251
if s.current.IsRoot() {
252+
fmt.Printf("\nroot assigning %v to %v\n\n", value.Type(), dst.Type())
252253
_, err := s.assignValue(dst, value)
253254
return dst, err
254255
}
@@ -266,28 +267,43 @@ func (s *state) assign(dst reflect.Value, value reflect.Value) (reflect.Value, e
266267
}
267268

268269
shouldSet := false
270+
fmt.Println("nd kind", nd.Kind())
269271
switch nd.Kind() {
270272
case reflect.Ptr:
271273
if nd.IsNil() {
272274
nd.Set(reflect.New(nd.Type().Elem()))
273275
}
276+
case reflect.Map:
277+
if nd.IsNil() {
278+
fmt.Println("map is nil")
279+
nd.Set(reflect.MakeMap(nd.Type()))
280+
}
281+
case reflect.Slice:
282+
if nd.IsNil() {
283+
nd.Set(reflect.MakeSlice(nd.Type(), 0, 1))
284+
}
274285
case reflect.Interface:
275286
if nd.IsNil() {
276287
return nd, newError(ErrUnreachable, *s, nd.Type())
277288
}
278-
}
279-
280-
if !nd.IsValid() {
281-
switch dst.Elem().Kind() {
289+
case reflect.Invalid:
290+
fmt.Printf("nd is invalid for token \"%s\" in pointer \"%s\"\n", t, s.current)
291+
switch dst.Type().Elem().Kind() {
282292
case reflect.Map, reflect.Slice:
283293
shouldSet = true
284-
nd = reflect.Zero(dst.Type().Elem())
294+
fmt.Println("dst.Type().Elem().Elem()", dst.Type().Elem().Elem())
295+
nd = reflect.Zero(dst.Type().Elem().Elem())
296+
if nd.IsNil() {
297+
nd = reflect.New(nd.Type().Elem())
298+
fmt.Println("new nd type", nd.Type())
299+
}
285300
default:
286301
fmt.Println(dst.Type())
287302
// TODO: figure out which other types would be invalid and remove this panic
288303
panic("resolving an invalid value which is not an entry on a map/slice is not done")
289304
}
290305
}
306+
fmt.Println(nd.Kind())
291307

292308
// TODO: check if value can be assigned
293309

@@ -298,27 +314,30 @@ func (s *state) assign(dst reflect.Value, value reflect.Value) (reflect.Value, e
298314
pv.Elem().Set(nd)
299315
nd = pv
300316
}
301-
302-
_ = shouldSet
303-
304317
var nv reflect.Value
305318
nv, err = s.assign(nd, value)
306319
s.current = s.current.Prepend(t)
307-
308320
if err != nil {
309321
return dst, err
310322
}
323+
_ = shouldSet
311324
nd, err = s.assignValue(nd, nv.Elem())
312325
if err != nil {
313326
return nd, err
314327
}
328+
switch nd.Elem().Kind() {
329+
case reflect.Map:
330+
fmt.Println("nv type", nv.Type())
331+
fmt.Println("map elem type", nd.Elem().Type())
332+
s.setMapIndex(nd.Elem(), t, nv)
333+
}
315334
return dst, nil
316335
}
317336

318337
func (s *state) assignValue(dst reflect.Value, v reflect.Value) (reflect.Value, error) {
319338
var err error
320339
cur := s.current
321-
340+
fmt.Printf("assigning %v to %v\n", v.Type(), dst.Type())
322341
if dst.Type().Implements(typeAssigner) {
323342
err = dst.Interface().(Assigner).AssignByJSONPointer(&cur, v)
324343
if err != nil {
@@ -476,11 +495,13 @@ func (s *state) setArrayIndex(src reflect.Value, token Token, v reflect.Value) e
476495
}
477496

478497
func (s *state) setMapIndex(src reflect.Value, token Token, v reflect.Value) error {
498+
fmt.Println("should be setting map index?")
499+
fmt.Println(src.Type())
479500
kv, err := s.mapKey(src, token)
480501
if err != nil {
481502
return err
482503
}
483-
v.SetMapIndex(kv, v)
504+
src.SetMapIndex(kv, v)
484505
return nil
485506
}
486507

0 commit comments

Comments
 (0)