~queer/packet-binser

remove varint support

refs

mistress
browse  log 

clone

read-only
https://git.sr.ht/~queer/packet-binser
read/write
git@git.sr.ht:~queer/packet-binser

You can also use your local clone with git send-email.

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