#deserialize #binary-encoding #networking #packet #de #type #binser

packet-binser

Simple binary (de)serialization library with a main usecase of network packets

3 releases (breaking)

0.3.0 Oct 31, 2024
0.2.0 Oct 29, 2024
0.1.1 Sep 8, 2024

#970 in Encoding

Download history 189/week @ 2024-09-07 31/week @ 2024-09-14 12/week @ 2024-09-21 7/week @ 2024-09-28 1/week @ 2024-10-05 253/week @ 2024-10-26 38/week @ 2024-11-02 2/week @ 2024-11-09

72 downloads per month

MIT/Apache

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