Skip to main content

Crate bitframe

Crate bitframe 

Source
Expand description

§bitframe

Macro-driven bit-level packet formats with zero-copy parsing.

bitframe generates zero-copy view types over &[u8] from annotated struct definitions. Each field is read on demand directly from the byte buffer — no allocation, no copying.

§Quick start

use bitframe::prelude::*;

#[bitframe]
pub struct SensorReading {
    pub tag:    u4,
    pub flags:  u4,
    pub value:  u16,
}

let bytes = [0xA5, 0x00, 0x0A];
let (reading, _rest) = SensorReadingRef::parse(&bytes)?;

assert_eq!(reading.tag().value(), 0xA);
assert_eq!(reading.flags().value(), 0x5);
assert_eq!(reading.value(), 10u16);

§Using Parseable in generic code

use bitframe::prelude::*;

fn parse_and_report<'a, T: Parseable<'a>>(bytes: &'a [u8]) -> Result<T::View, Error>
where
    T::View: core::fmt::Debug,
{
    let (view, rest) = T::parse(bytes)?;
    // rest contains any bytes beyond the layout
    Ok(view)
}

#[bitframe]
pub struct MyHeader {
    pub version: u4,
    pub length:  u12,
}

let bytes = [0x10, 0x0A];
let header = parse_and_report::<MyHeader>(&bytes)?;
assert_eq!(header.version().value(), 1);
assert_eq!(header.length().value(), 10);

§Bit-sized types

Types u1..u63 (skipping u8, u16, u32, u64) represent unsigned integers narrower than their backing storage. See the types module for details.

Re-exports§

pub use error::Error;
pub use types::OutOfRange;

Modules§

error
Error types for bitframe parsing operations.
prelude
Re-exports everything needed for typical bitframe usage.
traits
Core traits for bitframe layout types.
types
Bit-sized unsigned integer types (u1..u63).

Attribute Macros§

bitframe
Generates a zero-copy view type for a bit-level packet layout.
bitframe_enum
Generates bit-width-aware conversion methods for an enum.