KEKS can store various primitive scalar types (strings, integers, ...)
and container types (lists, maps, ...). Serialisation process is just
emitting the TLV-like encoding for each item recursively. Possible tag
values:
chr | hex | bin | vlen |
. | 2E | 00101110 | 0 | [encoding/LIST]'s EOC
! | 21 | 00100001 | 0 | [encoding/PRIM] NIL
f | 66 | 01100110 | 0 | [encoding/PRIM] FALSE
t | 74 | 01110100 | 0 | [encoding/PRIM] TRUE
L | 4C | 01001100 | 0 | [encoding/LIST]
M | 4D | 01001101 | 0 | [encoding/MAP]
B | 42 | 01000010 | 3+~ | [encoding/BLOB]
K | 4B | 01001011 | 15 | [encoding/MAGIC]
T | 54 | 01010100 | 8 | [encoding/TAI]64
N | 4E | 01001110 | 12 | [encoding/TAI]64N
A | 41 | 01000001 | 16 | [encoding/TAI]64NA
_ | 5F | 01011111 | 0 | [encoding/FLOAT] NaN
< | 3C | 00111100 | 0 | [encoding/FLOAT] -inf
> | 3E | 00111110 | 0 | [encoding/FLOAT] +inf
~ | 7E | 01111110 | 4+~ | [encoding/FLOAT]
+ | 2B | 00101011 | 1+~ | + [encoding/INT]
- | 2D | 00101101 | 1+~ | - [encoding/INT]
| 80 | 10000000 | 0 | Binary [encoding/String] len=0
| 81 | 10000001 | 1 | Binary [encoding/String] len=1
| ... | ... | ... | ...
| BC | 10111100 | 60 | Binary [encoding/String] len=60
| BD | 10111101 | 1+~ | Binary [encoding/String] 8b len
| BE | 10111110 | 2+~ | Binary [encoding/String] 16b len
| BF | 10111111 | 8+~ | Binary [encoding/String] 64b len
| C0 | 11000000 | 0 | UTF-8 [encoding/String] len=0
| C1 | 11000001 | 1 | UTF-8 [encoding/String] len=1
| ... | ... | ... | ...
| FC | 11111100 | 60 | UTF-8 [encoding/String] len=60
| FD | 11111101 | 1+~ | UTF-8 [encoding/String] len of 8b
| FE | 11111110 | 2+~ | UTF-8 [encoding/String] len of 16b
| FF | 11111111 | 8+~ | UTF-8 [encoding/String] len of 64b