@@ -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 ("\n root 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
318337func (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
478497func (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