69 lines
2.0 KiB
Go
69 lines
2.0 KiB
Go
package sereal
|
|
|
|
// ProtocolVersion is a maximum version supported by the sereal package.
|
|
const ProtocolVersion = 3
|
|
|
|
// magicHeadrBytes is a magic string for header. Every packet in protocol
|
|
// version 1 and 2 starts with this.
|
|
const magicHeaderBytes = uint32(0x6c72733d) // "=srl"
|
|
|
|
// magicHeaderBytesHighBit is a new magic string for header used in protocol
|
|
// version 3 and up, with high bit set for UTF8 sanity check. It is an error to
|
|
// use a new magic header on a v1 or v2 packet, and it is an error to use the
|
|
// old magic header in v3 or later.
|
|
const magicHeaderBytesHighBit = uint32(0x6c72f33d) // "=\xF3rl"
|
|
|
|
// magicHeaderBytesHighBitUTF8 is a magic string for header v3, corrupted by
|
|
// accidental UTF8 encoding. It makes it easy to detect when a Sereal document
|
|
// has been accidentally UTF-8 encoded because the \xF3 is translated to
|
|
// \xC3\xB3.
|
|
const magicHeaderBytesHighBitUTF8 = uint32(0x72b3c33d) // "=\xC3\xB3r"
|
|
|
|
const headerSize = 5 // 4 magic + 1 version-type
|
|
|
|
type documentType int
|
|
|
|
const (
|
|
serealRaw documentType = iota
|
|
serealSnappy
|
|
serealSnappyIncremental
|
|
serealZlib
|
|
)
|
|
|
|
type typeTag byte
|
|
|
|
const trackFlag = byte(0x80)
|
|
|
|
const (
|
|
typeVARINT = 0x20
|
|
typeZIGZAG = 0x21
|
|
typeFLOAT = 0x22
|
|
typeDOUBLE = 0x23
|
|
typeLONG_DOUBLE = 0x24
|
|
typeUNDEF = 0x25
|
|
typeBINARY = 0x26
|
|
typeSTR_UTF8 = 0x27
|
|
typeREFN = 0x28
|
|
typeREFP = 0x29
|
|
typeHASH = 0x2a
|
|
typeARRAY = 0x2b
|
|
typeOBJECT = 0x2c
|
|
typeOBJECTV = 0x2d
|
|
typeALIAS = 0x2e
|
|
typeCOPY = 0x2f
|
|
typeWEAKEN = 0x30
|
|
typeREGEXP = 0x31
|
|
typeOBJECT_FREEZE = 0x32
|
|
typeOBJECTV_FREEZE = 0x33
|
|
typeCANONICAL_UNDEF = 0x39
|
|
typeFALSE = 0x3a
|
|
typeTRUE = 0x3b
|
|
typeMANY = 0x3c
|
|
typePACKET_START = 0x3d
|
|
typeEXTEND = 0x3e
|
|
typePAD = 0x3f
|
|
typeARRAYREF_0 = 0x40
|
|
typeHASHREF_0 = 0x50
|
|
typeSHORT_BINARY_0 = 0x60
|
|
)
|