modular-bitfield 0.11.2

Allows to easily define bitfield types with modular building blocks.
Documentation
use modular_bitfield::prelude::*;

#[derive(BitfieldSpecifier)]
#[bits = 2]
pub enum Status {
    Red,
    Green,
    Yellow,
}

#[bitfield(bits = 4)]
#[derive(BitfieldSpecifier)]
pub struct Header {
    is_compact: bool,
    is_secure: bool,
    #[bits = 2]
    pre_status: Status,
}

#[bitfield(bits = 16, bytes = 2, filled = false)]
#[derive(BitfieldSpecifier)]
pub struct PackedData {
    #[bits = 4]
    header: Header,
    body: B9,
    #[bits = 2]
    status: Status,
}

fn main() {
    assert_eq!(<Status as Specifier>::BITS, 2);
    assert_eq!(<Header as Specifier>::BITS, 4);
    assert_eq!(<PackedData as Specifier>::BITS, 16);
}