Binary serialization API¶
Introduction¶
Mole has a simple serialization API based on Variant. It’s used for
converting data types to an array of bytes efficiently. This API is used
in the functions get_var and store_var of File
as well as the packet APIs for PacketPeer. This format
is not used for binary scenes and resources.
Packet specification¶
The packet is designed to be always padded to 4 bytes. All values are little endian encoded. All packets have a 4 byte header representing an integer, specifying the type of data:
Type |
Value |
|---|---|
0 |
null |
1 |
bool |
2 |
integer |
3 |
float |
4 |
string |
5 |
vector2 |
6 |
rect2 |
7 |
vector3 |
8 |
matrix32 |
9 |
plane |
10 |
quaternion |
11 |
aabb (rect3) |
12 |
matrix3x3 |
13 |
transform (matrix 4x3) |
14 |
color |
15 |
image |
16 |
node path |
17 |
rid (unsupported) |
18 |
object (unsupported) |
19 |
input event |
20 |
dictionary |
21 |
array |
22 |
ByteArray |
23 |
IntArray |
24 |
FloatArray |
25 |
StringArray |
26 |
Vector2Array |
27 |
Vector3Array |
28 |
ColorArray |
Following this is the actual packet contents, which varies for each type of packet:
0: null¶
1: bool¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Integer |
0 for False, 1 for True |
2: integer¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Integer |
Signed, 32-Bit Integer |
3: float¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Float |
IEE 754 32-Bits Float |
4: string¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Integer |
String Length (in Bytes) |
8 |
X |
Bytes |
UTF-8 Encoded String |
This field is padded to 4 bytes.
5: vector2¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Float |
X Coordinate |
8 |
4 |
Float |
Y Coordinate |
6: rect2¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Float |
X Coordinate |
8 |
4 |
Float |
Y Coordinate |
12 |
4 |
Float |
X Size |
16 |
4 |
Float |
Y Size |
7: vector3¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Float |
X Coordinate |
8 |
4 |
Float |
Y Coordinate |
12 |
4 |
Float |
Z Coordinate |
8: matrix32¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Float |
[0][0] |
8 |
4 |
Float |
[0][1] |
12 |
4 |
Float |
[1][0] |
16 |
4 |
Float |
[1][1] |
20 |
4 |
Float |
[2][0] |
24 |
4 |
Float |
[2][1] |
9: plane¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Float |
Normal X |
8 |
4 |
Float |
Normal Y |
12 |
4 |
Float |
Normal Z |
16 |
4 |
Float |
Distance |
10: quaternion¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Float |
Imaginary X |
8 |
4 |
Float |
Imaginary Y |
12 |
4 |
Float |
Imaginary Z |
16 |
4 |
Float |
Real W |
11: aabb (rect3)¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Float |
X Coordinate |
8 |
4 |
Float |
Y Coordinate |
12 |
4 |
Float |
Z Coordinate |
16 |
4 |
Float |
X Size |
20 |
4 |
Float |
Y Size |
24 |
4 |
Float |
Z Size |
12: matrix3x3¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Float |
[0][0] |
8 |
4 |
Float |
[0][1] |
12 |
4 |
Float |
[0][2] |
16 |
4 |
Float |
[1][0] |
20 |
4 |
Float |
[1][1] |
24 |
4 |
Float |
[1][2] |
28 |
4 |
Float |
[2][0] |
32 |
4 |
Float |
[2][1] |
36 |
4 |
Float |
[2][2] |
13: transform (matrix 4x3)¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Float |
[0][0] |
8 |
4 |
Float |
[0][1] |
12 |
4 |
Float |
[0][2] |
16 |
4 |
Float |
[1][0] |
20 |
4 |
Float |
[1][1] |
24 |
4 |
Float |
[1][2] |
28 |
4 |
Float |
[2][0] |
32 |
4 |
Float |
[2][1] |
36 |
4 |
Float |
[2][2] |
40 |
4 |
Float |
[3][0] |
44 |
4 |
Float |
[3][1] |
48 |
4 |
Float |
[3][2] |
14: color¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Float |
Red (0..1) |
8 |
4 |
Float |
Green (0..1) |
12 |
4 |
Float |
Blue (0..1) |
16 |
4 |
Float |
Alpha (0..1) |
15: image¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Integer |
Format (see FORMAT_* in “Image”:class_image |
8 |
4 |
Integer |
Mip-Maps (0 means no mip-maps). |
12 |
4 |
Integer |
Width (Pixels) |
16 |
4 |
Integer |
Height (Pixels) |
20 |
4 |
Integer |
Data Length |
24..24+DataLength |
1 |
Byte |
Image Data |
This field is padded to 4 bytes.
16: node path¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Integer |
String Length, or New Format (val&0x80000000!=0 and NameCount=val&0x7FFFFFFF) |
For old format:¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
8 |
X |
Bytes |
UTF-8 Encoded String |
Padded to 4 bytes.
For new format:¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Integer |
Sub-Name Count |
8 |
4 |
Integer |
Flags (absolute: val&1 != 0 ) |
For each Name and Sub-Name
Offset |
Len |
Type |
Description |
|---|---|---|---|
X+0 |
4 |
Integer |
String Length |
X+4 |
X |
Bytes |
UTF-8 Encoded String |
Every name string is padded to 4 bytes.
17: rid (unsupported)¶
18: object (unsupported)¶
19: input event¶
20: dictionary¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Integer |
val&0x7FFFFFFF = elements, val&0x80000000 = shared (bool) |
Then what follows is, for amount of “elements”, pairs of key and value, one after the other, using this same format.
21: array¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Integer |
val&0x7FFFFFFF = elements, val&0x80000000 = shared (bool) |
Then what follows is, for amount of “elements”, values one after the other, using this same format.
22: class_ByteArray¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Integer |
Array Length (Bytes) |
8..8+length |
1 |
Byte |
Byte (0..255) |
The array data is padded to 4 bytes.
23: IntArray¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Integer |
Array Length (Integers) |
8..8+length*4 |
4 |
Integer |
32 Bits Signed Integer |
24: class_FloatArray¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Integer |
Array Length (Floats) |
8..8+length*4 |
4 |
Integer |
32 Bits IEE 754 Float |
25: StringArray¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Integer |
Array Length (Strings) |
For each String:
Offset |
Len |
Type |
Description |
|---|---|---|---|
X+0 |
4 |
Integer |
String Length |
X+4 |
X |
Bytes |
UTF-8 Encoded String |
Every string is is padded to 4 bytes.
26: Vector2Array¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Integer |
Array Length |
8..8+length*8 |
4 |
Float |
X Coordinate |
8..12+length*8 |
4 |
Float |
Y Coordinate |
27: Vector3Array¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Integer |
Array Length |
8..8+length*12 |
4 |
Float |
X Coordinate |
8..12+length*12 |
4 |
Float |
Y Coordinate |
8..16+length*12 |
4 |
Float |
Z Coordinate |
28: ColorArray¶
Offset |
Len |
Type |
Description |
|---|---|---|---|
4 |
4 |
Integer |
Array Length |
8..8+length*16 |
4 |
Float |
Red (0..1) |
8..12+length*16 |
4 |
Float |
Green (0..1) |
8..16+length*16 |
4 |
Float |
Blue (0..1) |
8..20+length*16 |
4 |
Float |
Alpha (0..1) |