Documentation ¶
Index ¶
- Constants
- Variables
- func BinaryToInt(bs []byte) int64
- func BinaryToUint(bs []byte) uint64
- func Convertible(src, dest reflect.Type) bool
- func ConvertiblePtr(src, dest reflect.Type) bool
- func ConvertibleTo(src, dest reflect.Type) bool
- func Decode(r io.Reader, v interface{}) error
- func DecodeBigInt(r io.Reader, v interface{}) error
- func DecodeV1(r io.Reader, v interface{}) error
- func DecodeV2(r io.Reader, v interface{}) error
- func Encode(v interface{}, w io.Writer) error
- func EncodeBigInt(v interface{}, w io.Writer) error
- func EndOfFile(err error) bool
- func Marshal(v interface{}) ([]byte, error)
- func ReadBytesFromReader(r io.Reader, length int, buf []byte) ([]byte, error)
- func ReadMultiLengthBytesFromReader(vr ValueReader, length int, buf []byte) ([]byte, error)
- func ReadMultiLengthFromReader(vr ValueReader, length int) (uint64, error)
- func ToBinaryBuffer(v interface{}, w io.Writer) error
- func ToBinaryBytes(v interface{}) (ret []byte)
- func Unmarshal(buf []byte, v interface{}) error
- type Decoder
- type DefaultEventHandler
- func (h DefaultEventHandler) Array(_ *HandleContext, _ reflect.Value, _ int) error
- func (h DefaultEventHandler) Byte(_ *HandleContext, _ reflect.Value, _ byte) error
- func (h DefaultEventHandler) Bytes(_ *HandleContext, _ reflect.Value, _ []byte) error
- func (h DefaultEventHandler) Empty(_ *HandleContext, _ reflect.Value) error
- func (h DefaultEventHandler) Number(_ *HandleContext, _ reflect.Value, _ bool, _ []byte) error
- func (h DefaultEventHandler) True(_ *HandleContext, _ reflect.Value) error
- func (h DefaultEventHandler) Version(_ *HandleContext, _ reflect.Value, _ ...byte) error
- func (h DefaultEventHandler) Zero(_ *HandleContext, _ reflect.Value) error
- type Encoder
- type EventDecoder
- type EventHandler
- type HandleContext
- func (ctx *HandleContext) NestedStack(handler NestedHandler) error
- func (ctx *HandleContext) NewNested(typ reflect.Type) interface{}
- func (ctx *HandleContext) PopState() error
- func (ctx *HandleContext) PushState(val reflect.Value, th TypeHeader, length int, buf []byte, ...) error
- func (ctx *HandleContext) ReplaceStack(val reflect.Value) error
- func (ctx *HandleContext) SkipReader(length int) error
- func (ctx *HandleContext) StackInfo() string
- func (ctx *HandleContext) String() string
- type Lenner
- type NestedHandler
- type StructCodec
- type THValue
- type THValueType
- type TypeHeader
- type ValueReader
Constants ¶
View Source
const ( MaxSliceSize = 100 * 1024 * 1024 // max size of creating slice: 100MB MaxNested = 100 // max nested times when encoding. pointer, slice, array, map, struct )
Variables ¶
View Source
var ( NilOrFalse = headerTypeMap[THZeroValue].C NotNilOrTrue = headerTypeMap[THTrue].C Version0 = headerTypeMap[THVersion].WithNumber(0x0) Version1 = headerTypeMap[THVersion].WithNumber(0x1) Version2 = headerTypeMap[THVersion].WithNumber(0x2) Version3 = headerTypeMap[THVersion].WithNumber(0x3) Version4 = headerTypeMap[THVersion].WithNumber(0x4) Version5 = headerTypeMap[THVersion].WithNumber(0x5) Version6 = headerTypeMap[THVersion].WithNumber(0x6) Version7 = headerTypeMap[THVersion].WithNumber(0x7) Version8 = headerTypeMap[THVersion].WithNumber(0x8) Version9 = headerTypeMap[THVersion].WithNumber(0x9) Version10 = headerTypeMap[THVersion].WithNumber(0xa) Version11 = headerTypeMap[THVersion].WithNumber(0xb) Version12 = headerTypeMap[THVersion].WithNumber(0xc) Version13 = headerTypeMap[THVersion].WithNumber(0xd) Version14 = headerTypeMap[THVersion].WithNumber(0xe) Version15 = headerTypeMap[THVersion].WithNumber(0xf) )
View Source
var ( // header maker of encoding HeadMaker headMaker // codec for numerics Numeric numeric // serialize/deserialize self TypeOfEncoderPtr = reflect.TypeOf((*Encoder)(nil)) TypeOfEncoder = TypeOfEncoderPtr.Elem() TypeOfDecoderPtr = reflect.TypeOf((*Decoder)(nil)) TypeOfDecoder = TypeOfDecoderPtr.Elem() // errors ErrUnsupported = errors.New("unsupported") ErrNestingOverflow = fmt.Errorf("nesting overflow: %d times", MaxNested) ErrInsufficientLength = errors.New("insufficient length of the slice") ErrDecode = errors.New("decode error") ErrLength = errors.New("length error") ErrTooLarge = errors.New("too large to create") ErrDecodeIntoNil = errors.New("rtl: decode pointer MUST NOT be nil") ErrDecodeNoPtr = errors.New("rtl: value being decode MUST be a pointer") ErrEmptyStack = errors.New("rtl: stack is empty") ErrInvalidValue = errors.New("invalid reflect.Value") )
Functions ¶
func BinaryToInt ¶
func BinaryToUint ¶
func Convertible ¶ added in v1.2.1
func ConvertiblePtr ¶ added in v1.2.1
func ConvertibleTo ¶ added in v1.2.1
func Decode ¶
Decode reads bytes from r unmarshal to v, if you want to use same Reader to Decode multi values, you should use encoding.ValueReader as io.Reader.
func DecodeBigInt ¶
func EncodeBigInt ¶
func ReadBytesFromReader ¶
func ReadMultiLengthBytesFromReader ¶
func ReadMultiLengthBytesFromReader(vr ValueReader, length int, buf []byte) ([]byte, error)
func ReadMultiLengthFromReader ¶
func ReadMultiLengthFromReader(vr ValueReader, length int) (uint64, error)
func ToBinaryBuffer ¶
Types ¶
type DefaultEventHandler ¶ added in v1.1.1
type DefaultEventHandler struct{}
func (DefaultEventHandler) Array ¶ added in v1.1.1
func (h DefaultEventHandler) Array(_ *HandleContext, _ reflect.Value, _ int) error
func (DefaultEventHandler) Byte ¶ added in v1.1.1
func (h DefaultEventHandler) Byte(_ *HandleContext, _ reflect.Value, _ byte) error
func (DefaultEventHandler) Bytes ¶ added in v1.1.1
func (h DefaultEventHandler) Bytes(_ *HandleContext, _ reflect.Value, _ []byte) error
func (DefaultEventHandler) Empty ¶ added in v1.1.1
func (h DefaultEventHandler) Empty(_ *HandleContext, _ reflect.Value) error
func (DefaultEventHandler) Number ¶ added in v1.1.1
func (h DefaultEventHandler) Number(_ *HandleContext, _ reflect.Value, _ bool, _ []byte) error
func (DefaultEventHandler) True ¶ added in v1.1.1
func (h DefaultEventHandler) True(_ *HandleContext, _ reflect.Value) error
func (DefaultEventHandler) Version ¶ added in v1.1.1
func (h DefaultEventHandler) Version(_ *HandleContext, _ reflect.Value, _ ...byte) error
func (DefaultEventHandler) Zero ¶ added in v1.1.1
func (h DefaultEventHandler) Zero(_ *HandleContext, _ reflect.Value) error
type Encoder ¶
Encoder is the interface which encoding package while invoke the Serialization() when encoding the object. ATTENTION: the receiver of Encoder.Serialization() and Decoder.Deserialization() MUST BE SAME. otherwise, they will not be use in same struct.
type EventDecoder ¶ added in v1.1.0
type EventDecoder struct {
// contains filtered or unexported fields
}
type EventHandler ¶ added in v1.1.1
type EventHandler interface { Byte(ctx *HandleContext, value reflect.Value, input byte) error Zero(ctx *HandleContext, value reflect.Value) error True(ctx *HandleContext, value reflect.Value) error Empty(ctx *HandleContext, value reflect.Value) error Array(ctx *HandleContext, value reflect.Value, length int) error Number(ctx *HandleContext, value reflect.Value, isPositive bool, inputs []byte) error Bytes(ctx *HandleContext, value reflect.Value, inputs []byte) error Version(ctx *HandleContext, value reflect.Value, inputs ...byte) error }
type HandleContext ¶ added in v1.1.0
type HandleContext struct {
// contains filtered or unexported fields
}
func NewHandleContext ¶ added in v1.1.1
func NewHandleContext(r io.Reader) *HandleContext
func (*HandleContext) NestedStack ¶ added in v1.1.1
func (ctx *HandleContext) NestedStack(handler NestedHandler) error
func (*HandleContext) NewNested ¶ added in v1.1.1
func (ctx *HandleContext) NewNested(typ reflect.Type) interface{}
func (*HandleContext) PopState ¶ added in v1.1.1
func (ctx *HandleContext) PopState() error
func (*HandleContext) PushState ¶ added in v1.1.1
func (ctx *HandleContext) PushState(val reflect.Value, th TypeHeader, length int, buf []byte, handler NestedHandler) error
func (*HandleContext) ReplaceStack ¶ added in v1.1.1
func (ctx *HandleContext) ReplaceStack(val reflect.Value) error
func (*HandleContext) SkipReader ¶ added in v1.1.1
func (ctx *HandleContext) SkipReader(length int) error
func (*HandleContext) StackInfo ¶ added in v1.1.0
func (ctx *HandleContext) StackInfo() string
func (*HandleContext) String ¶ added in v1.1.0
func (ctx *HandleContext) String() string
type NestedHandler ¶ added in v1.1.0
type NestedHandler interface { String() string Element(ctx *HandleContext) error Index() int }
type StructCodec ¶
type StructCodec struct {
// contains filtered or unexported fields
}
func NewStructCodec ¶
func NewStructCodec(typ reflect.Type) (*StructCodec, error)
type THValue ¶
type THValue struct { N string // name of the type header C byte // code M byte // mask W byte // wildcard mask T THValueType // type of the header B bool // whether the header is followed by value bytes X bool // whether the type is a nested type, which means there's should be another header follow the current header }
type header value
func (THValue) WithNumber ¶
type THValueType ¶
type THValueType byte
const ( THVTByte THValueType = iota // one byte value THVTSingleHeader // single byte header THVTMultiHeader // multi bytes header THVTInvalid )
type TypeHeader ¶
type TypeHeader byte
const ( THSingleByte TypeHeader = iota // single byte THZeroValue // zero value (empty string / false of bool) THTrue // true of bool THEmpty // empty value THArraySingle // array with no more than 16 elements THArrayMulti // array with more than 16 elements THPosNumSingle // positive number with bytes less and equal to 8 THNegNumSingle // negative number with bytes less and equal to 8 THPosBigInt // positive big.Int THNegBigInt // negative big.Int THStringSingle // string with length less and equal to 32 THStringMulti // string with length more than 32 THVersion // 0 <= (version number) <= 15 THVersionSingle // 15 < (version number) < 2^64 THInvalid )
func ParseRTLHeader ¶
func ParseRTLHeader(b byte) (TypeHeader, int, error)
func (TypeHeader) FollowedByBytes ¶ added in v1.1.0
func (th TypeHeader) FollowedByBytes() bool
func (TypeHeader) FollowedByHeader ¶ added in v1.1.0
func (th TypeHeader) FollowedByHeader() bool
func (TypeHeader) IsValid ¶ added in v1.1.0
func (th TypeHeader) IsValid() bool
func (TypeHeader) Name ¶
func (th TypeHeader) Name() string
func (TypeHeader) Nested ¶ added in v1.1.0
func (th TypeHeader) Nested() bool
func (TypeHeader) String ¶
func (th TypeHeader) String() string
func (TypeHeader) ValueType ¶ added in v1.1.0
func (th TypeHeader) ValueType() (THValueType, bool)
type ValueReader ¶
type ValueReader interface { HasMore() bool ReadHeader() (TypeHeader, int, error) ReadFullHeader() (TypeHeader, int, error) io.ByteReader io.Reader ReadBytes(length int, buf []byte) ([]byte, error) ReadMultiLength(length int) (uint64, error) ReadMultiLengthBytes(length int, buf []byte) ([]byte, error) Skip() (int, error) }
func NewValueReader ¶
func NewValueReader(r io.Reader, _ ...int) ValueReader
Click to show internal directories.
Click to hide internal directories.