
### File layout


**Header**

0x00		u32			Declaration length
...			u128		KV records length
...			u128		Declaration records length

** Body **

... Declarations
... KV records
... Declaration records identifier 
... Declaration records ...
... Declaration records identifier 
... Declaration records ...
... Declaration records identifier 
... Declaration records ...
... and so on


---


### Data structure layouts


**Declaration layout**

0x00-0x01	u8			\x00x (0, 120), Identifier
0x02		u8			Name length
0x03		u16			Fields length
0xB0	 	[u8]		Name(String)
... 		[u8] 		Fields(HashMap<Vec<u8>, Vec<u8>) of field name and field type name
			u64			Records start
			u64			Total records length
			u64			Number of records


**KV records layout**

0x00-0x01	u8			\x01x (1, 120), Identifier
0x02		u8			Key length
0x03		u8			Type name length
0x04		u32			Value length
0xB0	 	[u8]		Key(String)
... 		[u8] 		Type name(String)
	 		[u8] 		Value(See type name)


**Declaration records layout**

Which declaration group they belong to can be found in the declaration layout at the beginning of the file


**Declaration record header layout**

0x00-0x01	u8			\x02x (2, 120), Identifier
... records


**Declaration record layout**

0x00-0x01	u8			\x03x (3, 120), Identifier
0x02 		u32 		Value length
... 		[u8]		Named fields(HashMap<Vec<u8>, Vec<u8>>)

