ba7b077d12c2566430ec9f3fba12d5fa40cf97b6
[ton] / don / tags.py
1 import collections
2
3 VOID = 0x00
4 TRUE = 0x01
5 FALSE = 0x02
6 BOOL = (TRUE, FALSE)
7 INT8 = 0x10
8 INT16 = 0x11
9 INT32 = 0x12
10 INT64 = 0x13
11 FLOAT = 0x20
12 DOUBLE = 0x21
13 BINARY = 0x30
14 UTF8 = 0x31
15 UTF16 = 0x32
16 UTF32 = 0x33
17 LIST = 0x40
18 DICTIONARY = 0x41
19
20 DEFAULT_INTEGER_ENCODING = INT32
21 DEFAULT_DECIMAL_ENCODING = DOUBLE
22 DEFAULT_STRING_ENCODING = UTF8
23
24 TaggedObject = collections.namedtuple('TaggedObject', ['tag', 'value'])
25
26 _TYPES_TO_TAGS = {
27     int: DEFAULT_INTEGER_ENCODING,
28     float: DEFAULT_DECIMAL_ENCODING,
29     bytes: BINARY,
30     str: DEFAULT_STRING_ENCODING,
31     list: LIST,
32     dict: DICTIONARY,
33     collections.OrderedDict: DICTIONARY,
34 }
35
36 def _tag(o):
37     if isinstance(o, TaggedObject):
38         return o
39
40     if o is None:
41         return TaggedObject(tag = VOID, value = o)
42
43     if o is True:
44         return TaggedObject(tag = TRUE, value = o)
45
46     if o is False:
47         return TaggedObject(tag = FALSE, value = o)
48
49     return TaggedObject(tag = _TYPES_TO_TAGS[type(o)], value = o)