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