(d *Decoder, v reflect.Value)
| 289 | } |
| 290 | |
| 291 | func decodeStructValue(d *Decoder, v reflect.Value) error { |
| 292 | c, err := d.readCode() |
| 293 | if err != nil { |
| 294 | return err |
| 295 | } |
| 296 | |
| 297 | n, err := d.mapLen(c) |
| 298 | if err == nil { |
| 299 | return d.decodeStruct(v, n) |
| 300 | } |
| 301 | |
| 302 | var err2 error |
| 303 | n, err2 = d.arrayLen(c) |
| 304 | if err2 != nil { |
| 305 | return err |
| 306 | } |
| 307 | |
| 308 | if n <= 0 { |
| 309 | v.Set(reflect.Zero(v.Type())) |
| 310 | return nil |
| 311 | } |
| 312 | |
| 313 | fields := structs.Fields(v.Type(), d.structTag) |
| 314 | if n != len(fields.List) { |
| 315 | return errArrayStruct |
| 316 | } |
| 317 | |
| 318 | for _, f := range fields.List { |
| 319 | if err := f.DecodeValue(d, v); err != nil { |
| 320 | return err |
| 321 | } |
| 322 | } |
| 323 | |
| 324 | return nil |
| 325 | } |
| 326 | |
| 327 | func (d *Decoder) decodeStruct(v reflect.Value, n int) error { |
| 328 | if n == -1 { |
nothing calls this directly
no test coverage detected
searching dependent graphs…