(t reflect.Type)
| 288 | } |
| 289 | |
| 290 | func (d *decoderBuilder) newArrayTypeDecoder(t reflect.Type) decoderFunc { |
| 291 | itemDecoder := d.typeDecoder(t.Elem()) |
| 292 | |
| 293 | return func(node gjson.Result, value reflect.Value, state *decoderState) (err error) { |
| 294 | if !node.IsArray() { |
| 295 | return fmt.Errorf("apijson: could not deserialize to an array") |
| 296 | } |
| 297 | |
| 298 | arrayNode := node.Array() |
| 299 | |
| 300 | arrayValue := reflect.MakeSlice(reflect.SliceOf(t.Elem()), len(arrayNode), len(arrayNode)) |
| 301 | for i, itemNode := range arrayNode { |
| 302 | err = itemDecoder(itemNode, arrayValue.Index(i), state) |
| 303 | if err != nil { |
| 304 | return err |
| 305 | } |
| 306 | } |
| 307 | |
| 308 | value.Set(arrayValue) |
| 309 | return nil |
| 310 | } |
| 311 | } |
| 312 | |
| 313 | func (d *decoderBuilder) newStructTypeDecoder(t reflect.Type) decoderFunc { |
| 314 | // map of json field name to struct field decoders |
no test coverage detected