in internal/encoding/decode.go [628:716]
func readAnyArray(r *buffer.Buffer) (any, error) {
// get the array type
buf := r.Bytes()
if len(buf) < 1 {
return nil, errors.New("invalid length")
}
var typeIdx int
switch AMQPType(buf[0]) {
case TypeCodeArray8:
typeIdx = 3
case TypeCodeArray32:
typeIdx = 9
default:
return nil, fmt.Errorf("invalid array type %02x", buf[0])
}
if len(buf) < typeIdx+1 {
return nil, errors.New("invalid length")
}
switch AMQPType(buf[typeIdx]) {
case TypeCodeByte:
var a []int8
err := (*arrayInt8)(&a).Unmarshal(r)
return a, err
case TypeCodeUbyte:
var a ArrayUByte
err := a.Unmarshal(r)
return a, err
case TypeCodeUshort:
var a []uint16
err := (*arrayUint16)(&a).Unmarshal(r)
return a, err
case TypeCodeShort:
var a []int16
err := (*arrayInt16)(&a).Unmarshal(r)
return a, err
case TypeCodeUint0, TypeCodeSmallUint, TypeCodeUint:
var a []uint32
err := (*arrayUint32)(&a).Unmarshal(r)
return a, err
case TypeCodeSmallint, TypeCodeInt:
var a []int32
err := (*arrayInt32)(&a).Unmarshal(r)
return a, err
case TypeCodeUlong0, TypeCodeSmallUlong, TypeCodeUlong:
var a []uint64
err := (*arrayUint64)(&a).Unmarshal(r)
return a, err
case TypeCodeSmalllong, TypeCodeLong:
var a []int64
err := (*arrayInt64)(&a).Unmarshal(r)
return a, err
case TypeCodeFloat:
var a []float32
err := (*arrayFloat)(&a).Unmarshal(r)
return a, err
case TypeCodeDouble:
var a []float64
err := (*arrayDouble)(&a).Unmarshal(r)
return a, err
case TypeCodeBool, TypeCodeBoolTrue, TypeCodeBoolFalse:
var a []bool
err := (*arrayBool)(&a).Unmarshal(r)
return a, err
case TypeCodeStr8, TypeCodeStr32:
var a []string
err := (*arrayString)(&a).Unmarshal(r)
return a, err
case TypeCodeSym8, TypeCodeSym32:
var a []Symbol
err := (*arraySymbol)(&a).Unmarshal(r)
return a, err
case TypeCodeVbin8, TypeCodeVbin32:
var a [][]byte
err := (*arrayBinary)(&a).Unmarshal(r)
return a, err
case TypeCodeTimestamp:
var a []time.Time
err := (*arrayTimestamp)(&a).Unmarshal(r)
return a, err
case TypeCodeUUID:
var a []UUID
err := (*arrayUUID)(&a).Unmarshal(r)
return a, err
default:
return nil, fmt.Errorf("array decoding not implemented for %#02x", buf[typeIdx])
}
}