4 releases
0.1.3 | Nov 2, 2024 |
---|---|
0.1.2 | Nov 1, 2024 |
0.1.1 | Nov 1, 2024 |
0.1.0 | Oct 31, 2024 |
#1031 in Encoding
95KB
734 lines
ucpack
Rust implementation of the ucpack serialization format used in the Arduino Alvik using serde.
This crate does not implement the body API itself, but rather the binary protocol and format it uses to encode its messages.
The crate
This crate exposes a struct called UcPack
which you can initialize to start encoding and decoding serde
compatible data types and structures.
[!WARNING] Not every type is compatible with ucpack. Namely any integer above 16 bits, lists and maps.
You can also const
initialize UcPack
and use it const
-ly from anywhere if carrying state
isn't an option:
const packer: UcPack = UcPack::new(b'A', b'#');
fn main() {
packer.serialize_slice(...); // ecc..
}
The protocol
NOTE: Table gently borrowed from ucpack's c++ repo
A packet is managed as:
index_byte | message length | message | stop_byte | crc8 |
---|---|---|---|---|
1 byte (default A) | 1 byte | N bytes from message length | 1 byte (default #) | 1 byte |
This crate, opposed to the c++ and micropython respectives, is agnostic
across the message
content (referred to by the name payload
in this crate).
Dependencies
~0.3–0.9MB
~21K SLoC