package binary import ( "io" ) const ( TYPE_NIL = Byte(0x00) TYPE_BYTE = Byte(0x01) TYPE_INT8 = Byte(0x02) TYPE_UINT8 = Byte(0x03) TYPE_INT16 = Byte(0x04) TYPE_UINT16 = Byte(0x05) TYPE_INT32 = Byte(0x06) TYPE_UINT32 = Byte(0x07) TYPE_INT64 = Byte(0x08) TYPE_UINT64 = Byte(0x09) TYPE_STRING = Byte(0x10) TYPE_BYTESLICE = Byte(0x11) TYPE_TIME = Byte(0x20) ) func GetBinaryType(o Binary) Byte { switch o.(type) { case nil: return TYPE_NIL case Byte: return TYPE_BYTE case Int8: return TYPE_INT8 case UInt8: return TYPE_UINT8 case Int16: return TYPE_INT16 case UInt16: return TYPE_UINT16 case Int32: return TYPE_INT32 case UInt32: return TYPE_UINT32 case Int64: return TYPE_INT64 case UInt64: return TYPE_UINT64 case String: return TYPE_STRING case ByteSlice: return TYPE_BYTESLICE case Time: return TYPE_TIME default: panic("Unsupported type") } } func ReadBinaryN(r io.Reader) (o Binary, n int64) { type_, n_ := ReadByteN(r) n += n_ switch type_ { case TYPE_NIL: o, n_ = nil, 0 case TYPE_BYTE: o, n_ = ReadByteN(r) case TYPE_INT8: o, n_ = ReadInt8N(r) case TYPE_UINT8: o, n_ = ReadUInt8N(r) case TYPE_INT16: o, n_ = ReadInt16N(r) case TYPE_UINT16: o, n_ = ReadUInt16N(r) case TYPE_INT32: o, n_ = ReadInt32N(r) case TYPE_UINT32: o, n_ = ReadUInt32N(r) case TYPE_INT64: o, n_ = ReadInt64N(r) case TYPE_UINT64: o, n_ = ReadUInt64N(r) case TYPE_STRING: o, n_ = ReadStringN(r) case TYPE_BYTESLICE: o, n_ = ReadByteSliceN(r) case TYPE_TIME: o, n_ = ReadTimeN(r) default: panic("Unsupported type") } n += n_ return o, n }