in internal/encoding/decode.go [482:581]
func ReadAny(r *buffer.Buffer) (any, error) {
if tryReadNull(r) {
return nil, nil
}
type_, err := peekType(r)
if err != nil {
return nil, errors.New("invalid length")
}
switch type_ {
// composite
case 0x0:
return readComposite(r)
// bool
case TypeCodeBool, TypeCodeBoolTrue, TypeCodeBoolFalse:
return readBool(r)
// uint
case TypeCodeUbyte:
return ReadUbyte(r)
case TypeCodeUshort:
return readUshort(r)
case TypeCodeUint,
TypeCodeSmallUint,
TypeCodeUint0:
return readUint32(r)
case TypeCodeUlong,
TypeCodeSmallUlong,
TypeCodeUlong0:
return readUlong(r)
// int
case TypeCodeByte:
return readSbyte(r)
case TypeCodeShort:
return readShort(r)
case TypeCodeInt,
TypeCodeSmallint:
return readInt32(r)
case TypeCodeLong,
TypeCodeSmalllong:
return readLong(r)
// floating point
case TypeCodeFloat:
return readFloat(r)
case TypeCodeDouble:
return readDouble(r)
// binary
case TypeCodeVbin8, TypeCodeVbin32:
return readBinary(r)
// strings
case TypeCodeStr8, TypeCodeStr32:
return ReadString(r)
case TypeCodeSym8, TypeCodeSym32:
// symbols currently decoded as string to avoid
// exposing symbol type in message, this may need
// to change if users need to distinguish strings
// from symbols
return ReadString(r)
// timestamp
case TypeCodeTimestamp:
return readTimestamp(r)
// UUID
case TypeCodeUUID:
return readUUID(r)
// arrays
case TypeCodeArray8, TypeCodeArray32:
return readAnyArray(r)
// lists
case TypeCodeList0, TypeCodeList8, TypeCodeList32:
return readAnyList(r)
// maps
case TypeCodeMap8:
return readAnyMap(r)
case TypeCodeMap32:
return readAnyMap(r)
// TODO: implement
case TypeCodeDecimal32:
return nil, errors.New("decimal32 not implemented")
case TypeCodeDecimal64:
return nil, errors.New("decimal64 not implemented")
case TypeCodeDecimal128:
return nil, errors.New("decimal128 not implemented")
case TypeCodeChar:
return nil, errors.New("char not implemented")
default:
return nil, fmt.Errorf("unknown type %#02x", type_)
}
}