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
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.