3 releases (breaking)
0.3.0 | Oct 31, 2024 |
---|---|
0.2.0 | Oct 29, 2024 |
0.1.1 | Sep 8, 2024 |
#970 in Encoding
72 downloads per month
9KB
161 lines
packet-binser
packet-binser
is a Rust library for simple (de)serialization of network packets.
It provides default implementations for predictibly sized primitive types as well as common std types.
Features
- Derive macros available to automatically implement serialization and deserialization. (Enabled with the
derive
feature.)
Getting Started
Add to Cargo.toml
Add the following to your Cargo.toml
file:
[dependencies]
# or latest version
packet-binser = "0.2" # or packet-binser = { version = "0.2", features = [...] }
Example Usage (Without derive)
use packet_binser::{Binser, BytesReadExt, BytesWriteExt, Error};
struct HandshakePacket(u8);
impl Binser for HandshakePacket {
fn serialize<B: BytesWriteExt>(&self, buffer: &mut B) -> Result<(), Error> {
buffer.write_u8(0x1)?; // packet id, not read in deserialize since it should be read elsewhere
self.0.serialize(buffer)?;
Ok(())
}
fn deserialize<B: BytesReadExt>(buffer: &mut B) -> Result<Self, Error> {
Ok(Self(u8::deserialize(buffer)?))
}
}
Example Usage (With derive)
use packet_binser::proc::Binser;
#[derive(Binser)]
#[repr(u8)]
enum ClientPackets {
Handshake {
id: u8,
} = 0x1,
}
Default Implementations
u8
,u16
,u32
,u64
,u128
i8
,i16
,i32
,i64
,i128
f32
,f64
bool
std::string::String
std::option::Option<T: Binser>
std::vec::Vec<T: Binser>
[T; N] where T: Binser
License
This project is dual licensed under both the MIT License and Apache License 2.0.
Feel free to open an issue if you encounter any problems or have suggestions.
Dependencies
~240–700KB
~16K SLoC