BitWrap

BitWrap is a derive macro and trait to declare a struct data member
with explicit size, in bits.
BitWrap Trait
BitWrap trait declares 2 methods:
fn pack(&self, dst: &mut [u8]) -> Result<usize, BitWrapError>
pack method serialize struct fields into dst array
fn unpack(&mut self, src: &[u8]) -> Result<usize, BitWrapError>
unpack method deserialize struct fields from src array
BitWrap Macro
use bitwrap::BitWrap;
#[derive(BitWrap)]
struct Packet {
#[bits(1)]
flag_1: u8,
#[bits(1)]
flag_2: bool,
#[bits(6, skip = 0b111111)]
#[bits(8, from = Enum::from, into = Enum::into)]
variant: Enum,
#[bits]
ip: std::net::Ipv4Addr
#[bits(8, into = self.set_len)]
len: usize,
#[bytes(self.len)]
data: Vec<u8>,
}