Expand description
§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
derivefeature.)
§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,u128i8,i16,i32,i64,i128f32,f64boolstd::string::Stringstd::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.