Documentation ¶
Index ¶
- Constants
- func BigIntBytes(v *big.Int, bitsize int) []byte
- func Decode(data []byte, res any) error
- func Marshal(v any) ([]byte, error)
- func RandomBytes(size int) []byte
- func RegisterEnums(enums ...Object)
- func RegisterObjects(obs ...Object)
- func Sha1(input string) []byte
- func Sha1Byte(input []byte) []byte
- func UnwrapNativeTypes(in Object) any
- type Decoder
- func (d *Decoder) DumpWithoutRead() ([]byte, error)
- func (d *Decoder) ExpectTypesInInterface(types ...reflect.Type)
- func (d *Decoder) GetRestOfMessage() ([]byte, error)
- func (d *Decoder) PopBool() bool
- func (d *Decoder) PopCRC() uint32
- func (d *Decoder) PopDouble() float64
- func (d *Decoder) PopInt() int32
- func (d *Decoder) PopLong() int64
- func (d *Decoder) PopMessage() []byte
- func (d *Decoder) PopNull()
- func (d *Decoder) PopRawBytes(size int) []byte
- func (d *Decoder) PopUint() uint32
- func (d *Decoder) PopVector(as reflect.Type) any
- type Encoder
- func (e *Encoder) CheckErr() error
- func (e *Encoder) PutBool(v bool)
- func (e *Encoder) PutCRC(v uint32)
- func (e *Encoder) PutDouble(v float64)
- func (e *Encoder) PutInt(v int32)
- func (e *Encoder) PutLong(v int64)
- func (e *Encoder) PutMessage(b []byte)
- func (e *Encoder) PutRawBytes(b []byte)
- func (e *Encoder) PutString(msg string)
- func (e *Encoder) PutUint(v uint32)
- func (e *Encoder) PutVector(v any)
- type ErrMustParseSlicesExplicitly
- type ErrRegisteredObjectNotFound
- type ErrorPartialWrite
- type FlagIndexGetter
- type Int128
- type Int256
- type Marshaler
- type Object
- type PseudoFalse
- type PseudoNil
- type PseudoTrue
- type Tag
- type Tags
- type Unmarshaler
- type WrappedSlice
Constants ¶
const ( WordLen = 4 // Size of a word in TL (32 bits) LongLen = WordLen * 2 // int64 occupies 8 bytes DoubleLen = WordLen * 2 // float64 occupies 8 bytes Int128Len = WordLen * 4 // int128 occupies 16 bytes Int256Len = WordLen * 8 // int256 occupies 32 bytes // Magic Numbers MaxArrayElements = 0xfe // Maximum number of elements that can be encoded in an array MagicNumber = 0xfe // 254 // https://core.telegram.org/schema/mtproto CrcVector uint32 = 0x1cb5c415 CrcFalse uint32 = 0xbc799737 CrcTrue uint32 = 0x997275b5 CrcNull uint32 = 0x56730bcc )
Variables ¶
This section is empty.
Functions ¶
func RandomBytes ¶
func RegisterEnums ¶
func RegisterEnums(enums ...Object)
func RegisterObjects ¶
func RegisterObjects(obs ...Object)
func UnwrapNativeTypes ¶
Types ¶
type Decoder ¶
type Decoder struct {
// contains filtered or unexported fields
}
A Decoder reads and decodes TL values from an input stream.
func NewDecoder ¶
NewDecoder returns a new decoder that reads from r.
Note: The decoder cannot work with partial data. The entire input must be read before decoding can begin.
func (*Decoder) DumpWithoutRead ¶
func (*Decoder) ExpectTypesInInterface ¶
ExpectTypesInInterface defines how the decoder should parse implicit objects.
How `expectedTypes` works:
Imagine you want to parse a `[]int32`, but you might also receive `[]int64`, `SomeCustomType`, or even `[][]bool`. How do you handle this?
`expectedTypes` stores your predictions. For example, if you encounter an unknown type, it will parse it as `int32` instead of `int64`.
If you have predictions deeper than the first unknown type, you can tell the decoder to use those predicted values.
So, next time you have a structure with an `interface{}` field that expects to contain `[]float64` or similar, use this feature via `d.ExpectTypesInInterface()`.
func (*Decoder) GetRestOfMessage ¶
func (*Decoder) PopMessage ¶
func (*Decoder) PopRawBytes ¶
type Encoder ¶
type Encoder struct {
// contains filtered or unexported fields
}
func NewEncoder ¶
func (*Encoder) CheckErr ¶
CheckErr must be called after encoding has been finished. If this function returns a non-nil value, the encoding has failed, and the resulting data should not be used.
func (*Encoder) PutBool ¶
PutBool is a very specific type. Since there are separate constructors for true and false, they can be considered as two CRC constants.
func (*Encoder) PutCRC ¶
PutCRC is an alias for Encoder.PutUint. It is used for better code readability and self-documentation.
func (*Encoder) PutMessage ¶
func (*Encoder) PutRawBytes ¶
type ErrMustParseSlicesExplicitly ¶
type ErrMustParseSlicesExplicitly struct{}
func (*ErrMustParseSlicesExplicitly) Error ¶
func (e *ErrMustParseSlicesExplicitly) Error() string
type ErrRegisteredObjectNotFound ¶
func (*ErrRegisteredObjectNotFound) Error ¶
func (e *ErrRegisteredObjectNotFound) Error() string
type ErrorPartialWrite ¶
func (*ErrorPartialWrite) Error ¶
func (e *ErrorPartialWrite) Error() string
type FlagIndexGetter ¶
type FlagIndexGetter interface {
FlagIndex() int
}
type Int128 ¶
Int128 is alias-like type for fixed size of big int (1024 bit value). It using only for tl objects encoding cause native big.Int isn't supported for en(de)coding
func (*Int128) MarshalTL ¶
MarshalTL implements tl marshaler from this package. Just don't use it by your hands, tl.Encoder does all what you need
func (*Int128) UnmarshalTL ¶
UnmarshalTL implements tl unmarshaler from this package. Just don't use it by your hands, tl.Decoder does all what you need
type Int256 ¶
Int256 is alias-like type for fixed size of big int (2048 bit value). It using only for tl objects encoding cause native big.Int isn't supported for en(de)coding
func (*Int256) MarshalTL ¶
MarshalTL implements tl marshaler from this package. Just don't use it by your hands, tl.Encoder does all what you need
func (*Int256) UnmarshalTL ¶
UnmarshalTL implements tl unmarshaler from this package. Just don't use it by your hands, tl.Decoder does all what you need
type PseudoFalse ¶
type PseudoFalse struct{}
PseudoFalse is a support struct which is required to get native
func (*PseudoFalse) CRC ¶
func (*PseudoFalse) CRC() uint32
type PseudoTrue ¶
type PseudoTrue struct{}
PseudoTrue is a support struct which is required to get native
func (*PseudoTrue) CRC ¶
func (*PseudoTrue) CRC() uint32
type Tag ¶
type Tag struct { // Key is the tag key, such as json, xml, etc.. // i.e: `json:"foo,omitempty". Here key is: "json" Key string // Name is a part of the value // i.e: `json:"foo,omitempty". Here name is: "foo" Name string // Options is a part of the value. It contains a slice of tag options i.e: // `json:"foo,omitempty". Here options is: ["omitempty"] Options []string }
Tag defines a single struct's string literal tag
type Tags ¶
type Tags struct {
// contains filtered or unexported fields
}
Tags represent a set of tags from a single struct field
type Unmarshaler ¶
type WrappedSlice ¶
type WrappedSlice struct {
// contains filtered or unexported fields
}
WrappedSlice is pseudo type. YOU SHOULD NOT use it customly, instead, you must encode/decode value by encoder.PutVector or decoder.PopVector
func (*WrappedSlice) CRC ¶
func (*WrappedSlice) CRC() uint32
func (*WrappedSlice) Unwrap ¶
func (w *WrappedSlice) Unwrap() any