-
-
Notifications
You must be signed in to change notification settings - Fork 117
/
bin.go
50 lines (43 loc) · 1.31 KB
/
bin.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
// 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:
// * https://core.telegram.org/mtproto/serialize
// * https://core.telegram.org/mtproto/TL-abstract-types
package bin
// Basic TL types.
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
)
// Word represents 4-byte sequence.
// Values in TL are generally aligned to Word.
const Word = 4
func nearestPaddedValueLength(l int) int {
n := Word * (l / Word)
if n < l {
n += Word
}
return n
}
// Encoder can encode it's binary form to Buffer.
type Encoder interface {
Encode(b *Buffer) error
}
// Decoder can decode it's binary form from Buffer.
type Decoder interface {
Decode(b *Buffer) error
}
// Object wraps Decoder and Encoder interface and represents TL Object.
type Object interface {
Decoder
Encoder
}