bin

package
v0.7.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Dec 5, 2020 License: MIT Imports: 6 Imported by: 36

Documentation

Overview

Package bin implements binary serialization and deserialization for TL, providing Buffer that can decode and encode basic Type Language types.

This package is not intended to be used directly.

Ref:

Index

Constants

View Source
const (
	TypeIntID    = 0xa8509bda // int = Int (0xa8509bda)
	TypeLongID   = 0x22076cba // long = Long (0x22076cba)
	TypeDoubleID = 0x2210c154 // double = Double (0x2210c154)
	TypeStringID = 0xb5286e24 // string = String (0xb5286e24)
	TypeVector   = 0x1cb5c415 // vector {t:Type} # [ t ] = Vector t
	TypeBytes    = 0xe937bb82 // bytes#e937bb82 = Bytes

	TypeTrue  = 0x997275b5 // boolTrue#997275b5 = Bool
	TypeFalse = 0xbc799737 // boolFalse#bc799737 = Bool
)

Basic TL types.

View Source
const Word = 4

Word represents 4-byte sequence. Values in TL are generally aligned to Word.

Variables

View Source
var ErrNonZeroPadding = errors.New("bin: non-zero byte in padding")

ErrNonZeroPadding means that padding value contained non-zero byte which is unexpected and can be a sign of incorrect protocol implementation or data loss.

Functions

func NewUnexpectedID

func NewUnexpectedID(id uint32) error

NewUnexpectedID return new UnexpectedIDErr.

Types

type Buffer

type Buffer struct {
	Buf []byte
}

Buffer implements low level binary (de-)serialization for TL.

func (*Buffer) Bool

func (b *Buffer) Bool() (bool, error)

Bool decodes bare boolean from Buffer.

func (*Buffer) Bytes

func (b *Buffer) Bytes() ([]byte, error)

Bytes decodes byte slice from Buffer.

NB: returning value is slice of buffer, it is not safe to retain or modify. User should copy value if needed.

func (*Buffer) ConsumeID

func (b *Buffer) ConsumeID(id uint32) error

ConsumeID decodes type id from Buffer. If id differs from provided, the *UnexpectedIDErr{ID: gotID} will be returned and buffer will be not consumed.

func (*Buffer) ConsumeN

func (b *Buffer) ConsumeN(target []byte, n int) error

func (*Buffer) ConsumePadding

func (b *Buffer) ConsumePadding(n int) error

ConsumePadding consumes n zero bytes from buffer.

If consumed value is non-zero, ErrNonZeroPadding is returned. If not enough bytes to consume, io.ErrUnexpectedEOF is returned.

func (*Buffer) Copy

func (b *Buffer) Copy() []byte

func (*Buffer) Double

func (b *Buffer) Double() (float64, error)

Double decodes 64-bit floating point from Buffer.

func (*Buffer) ID

func (b *Buffer) ID() (uint32, error)

ID decodes type id from Buffer.

func (*Buffer) Int

func (b *Buffer) Int() (int, error)

Int decodes integer from Buffer.

func (*Buffer) Int128

func (b *Buffer) Int128() (Int128, error)

Int128 decodes 128-bit signed integer from Buffer.

func (*Buffer) Int256

func (b *Buffer) Int256() (Int256, error)

Int128 decodes 128-bit unsigned integer from Buffer.

func (*Buffer) Int32

func (b *Buffer) Int32() (int32, error)

Int32 decodes signed 32-bit integer from Buffer.

func (Buffer) Len

func (b Buffer) Len() int

Len returns length of internal buffer.

func (*Buffer) Long

func (b *Buffer) Long() (int64, error)

Long decodes 64-bit signed integer from Buffer.

func (*Buffer) PeekID

func (b *Buffer) PeekID() (uint32, error)

PeekID returns next type id in Buffer, but does not consume it.

func (*Buffer) Put

func (b *Buffer) Put(raw []byte)

Put appends raw bytes to buffer.

Buffer does not retain raw.

func (*Buffer) PutBool

func (b *Buffer) PutBool(v bool)

PutBool serializes bare boolean.

func (*Buffer) PutBytes

func (b *Buffer) PutBytes(v []byte)

PutBytes serializes bare byte string.

func (*Buffer) PutDouble

func (b *Buffer) PutDouble(v float64)

PutDouble serializes v as 64-bit floating point.

func (*Buffer) PutID

func (b *Buffer) PutID(id uint32)

PutID serializes type definition id, like a8509bda.

func (*Buffer) PutInt

func (b *Buffer) PutInt(v int)

PutInt serializes v as signed 32-bit integer.

If v is bigger than 32-bit, `behavior` is undefined.

func (*Buffer) PutInt128

func (b *Buffer) PutInt128(v Int128)

PutInt128 serializes v as 128-bit signed integer.

func (*Buffer) PutInt256

func (b *Buffer) PutInt256(v Int256)

PutInt256 serializes v as 256-bit signed integer.

func (*Buffer) PutInt32

func (b *Buffer) PutInt32(v int32)

PutInt32 serializes signed 32-bit integer.

func (*Buffer) PutLong

func (b *Buffer) PutLong(v int64)

PutLong serializes v as signed integer.

func (*Buffer) PutPadding

func (b *Buffer) PutPadding(n int)

PutPadding appends zeroes to buffer as padding.

func (*Buffer) PutString

func (b *Buffer) PutString(s string)

PutString serializes bare string.

func (*Buffer) PutUint32

func (b *Buffer) PutUint32(v uint32)

func (*Buffer) PutUint64

func (b *Buffer) PutUint64(v uint64)

PutUint64 serializes v as unsigned 64-bit integer.

func (*Buffer) PutVectorHeader

func (b *Buffer) PutVectorHeader(length int)

PutVectorHeader serializes vector header with provided length.

func (Buffer) Raw

func (b Buffer) Raw() []byte

Raw returns internal byte slice.

func (*Buffer) Read added in v0.7.0

func (b *Buffer) Read(p []byte) (n int, err error)

Read implements io.Reader.

func (*Buffer) Reset

func (b *Buffer) Reset()

Reset buffer to zero length.

func (*Buffer) ResetTo

func (b *Buffer) ResetTo(buf []byte)

ResetTo sets internal buffer exactly to provided value.

Buffer will retain buf, so user should not modify or read it concurrently.

func (*Buffer) String

func (b *Buffer) String() (string, error)

String decodes string from Buffer.

func (*Buffer) Uint32

func (b *Buffer) Uint32() (uint32, error)

Uint32 decodes unsigned 32-bit integer from Buffer.

func (*Buffer) VectorHeader

func (b *Buffer) VectorHeader() (int, error)

VectorHeader decodes vector length from Buffer.

func (*Buffer) Write

func (b *Buffer) Write(p []byte) (n int, err error)

func (Buffer) WriteTo

func (b Buffer) WriteTo(w io.Writer) (n int64, err error)

type Decoder

type Decoder interface {
	Decode(b *Buffer) error
}

Decoder can decode it's binary form from Buffer.

type Encoder

type Encoder interface {
	Encode(b *Buffer) error
}

Encoder can encode it's binary form to Buffer.

type Fields

type Fields uint32

Fields represent a bitfield value that compactly encodes information about provided conditional fields, e.g. says that fields "1", "5" and "10" were set.

func (*Fields) Decode

func (f *Fields) Decode(b *Buffer) error

Decode implements Decoder.

func (Fields) Encode

func (f Fields) Encode(b *Buffer) error

Encode implements Encoder.

func (Fields) Has

func (f Fields) Has(n int) bool

Has reports whether field with index n was set.

func (*Fields) Set

func (f *Fields) Set(n int)

Set sets field with index n.

func (*Fields) Unset

func (f *Fields) Unset(n int)

Unset unsets field with index n.

type Int128

type Int128 [16]byte

Int128 represents signed 128-bit integer.

func (Int128) BigInt

func (i Int128) BigInt() *big.Int

BigInt returns corresponding big.Int value.

func (*Int128) Decode

func (i *Int128) Decode(buf *Buffer) error

func (Int128) Encode

func (i Int128) Encode(b *Buffer) error

type Int256

type Int256 [32]byte

Int256 represents signed 256-bit integer.

func (Int256) BigInt

func (i Int256) BigInt() *big.Int

func (*Int256) Decode

func (i *Int256) Decode(buf *Buffer) error

func (Int256) Encode

func (i Int256) Encode(b *Buffer) error

type UnexpectedIDErr

type UnexpectedIDErr struct {
	ID uint32
}

UnexpectedIDErr means that unknown or unexpected type id was decoded.

func (UnexpectedIDErr) Error

func (e UnexpectedIDErr) Error() string

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL