BluePacket is a serialization / deserialization library for many programing languages, focused on simple native data structures. We aim to support as many languages as possible, from the mainstream ones to the more experimental.
- BluePacket definitions are compiled into simple data structures (classes or structs) native and idiomatic to each language.
- Serialization and deserialization into binary is fast and compact. The binary representations can be further compacted using common compression algorithms, such as gzip.
- BluePacket definitions are composed of common basic data types (byte, int, string, etc.), arrays, and enums.
- BluePacket definitions can contain comments that are carried over the generated source code in their native docstring format.
- BluePackets can reference each other (even recursively) within their namespace.
To use BluePacket you only need to add one library source file to your project, as well as one exporter for each language supported. The exporter script is in python 3. You compile BluePacket definitions into source code separately for the languages you need, and include them to your projects.
Person:
string firstName
string lastName
Date birthDate
list Phone phoneNumbers
# inner struct defined inside Person
Phone:
string number
PhoneType type
PhoneType: enum
Mobile, Home, Work
# Global definition, usable everywhere
Date:
short year
byte month
byte day
- byte (signed)
- short (signed)
- int (signed)
- long (signed)
- ubyte (unsigned)
- ushort (unsigned)
- bool
- string
In addition to built-in types, fields can be a defined BluePacket type, or an Enums. All types (built-in and defined) can be in a list
.
Enums are encoded as a byte or a short, start a zero and are auto-incremented.
Language | de/ser | const | bptext | bpbin | distri | rpc client | rpc server | connected client | connected server |
---|---|---|---|---|---|---|---|---|---|
Java | Y | Y | Y | ||||||
Python | Y | Y | |||||||
C# | Y | ||||||||
Go | Y | ||||||||
C / C++ | |||||||||
Rust | |||||||||
Zig | |||||||||
Javascript | |||||||||
Lua |
- (java) why are the generated files final? I want to subclass some of them.
- subclasses would not be de/serializable while still being of type BluePacket, so we have to prevent subclassing.
- if what you want is to add information (member variables): you can create your own class that has your BluePacket as one member variable (composition)
- if what you want is to add methods: you can have util static methods that use your BluePacket class as one input parameter