MCPcopy Index your code
hub / github.com/segmentio/encoding / decodeArray

Method decodeArray

json/decode.go:506–565  ·  view source on GitHub ↗
(b []byte, p unsafe.Pointer, n int, size uintptr, t reflect.Type, decode decodeFunc)

Source from the content-addressed store, hash-verified

504}
505
506func (d decoder) decodeArray(b []byte, p unsafe.Pointer, n int, size uintptr, t reflect.Type, decode decodeFunc) ([]byte, error) {
507 if hasNullPrefix(b) {
508 return b[4:], nil
509 }
510
511 if len(b) < 2 || b[0] != '[' {
512 return d.inputError(b, t)
513 }
514 b = b[1:]
515
516 var err error
517 for i := range n {
518 b = skipSpaces(b)
519
520 if i != 0 {
521 if len(b) == 0 {
522 return b, syntaxError(b, "unexpected EOF after array element")
523 }
524 switch b[0] {
525 case ',':
526 b = skipSpaces(b[1:])
527 case ']':
528 return b[1:], nil
529 default:
530 return b, syntaxError(b, "expected ',' after array element but found '%c'", b[0])
531 }
532 }
533
534 b, err = decode(d, b, unsafe.Pointer(uintptr(p)+(uintptr(i)*size)))
535 if err != nil {
536 if e, ok := err.(*UnmarshalTypeError); ok {
537 e.Struct = t.String() + e.Struct
538 e.Field = d.prependField(strconv.Itoa(i), e.Field)
539 }
540 return b, err
541 }
542 }
543
544 // The encoding/json package ignores extra elements found when decoding into
545 // array types (which have a fixed size).
546 for {
547 b = skipSpaces(b)
548
549 if len(b) == 0 {
550 return b, syntaxError(b, "missing closing ']' in array value")
551 }
552
553 switch b[0] {
554 case ',':
555 b = skipSpaces(b[1:])
556 case ']':
557 return b[1:], nil
558 }
559
560 _, b, _, err = d.parseValue(b)
561 if err != nil {
562 return b, err
563 }

Callers 1

constructArrayDecodeFuncFunction · 0.80

Calls 7

inputErrorMethod · 0.95
prependFieldMethod · 0.95
parseValueMethod · 0.95
hasNullPrefixFunction · 0.85
skipSpacesFunction · 0.85
syntaxErrorFunction · 0.85
StringMethod · 0.65

Tested by

no test coverage detected