bitbybit 2.0.0

Efficient implementation of bit-fields where several numbers are packed within a larger number and bit-enums. Useful for drivers, so it works in no_std environments
Documentation
use arbitrary_int::u4;
use bitbybit::bitfield;

#[bitfield(u32, debug)]
pub struct BitfieldU32 {
    #[bits(28..=31, rw)]
    val3: u4,
    #[bits(24..=27, rw)]
    val2: u4,
    #[bits(16..=23, rw)]
    val1: u8,
    #[bits(0..=15, rw)]
    val0: u16,
}

pub fn main() {
    let bitfield = BitfieldU32::new_with_raw_value(0x0);
    assert_eq!(bitfield.val0(), 0);
    assert_eq!(bitfield.val1(), 0);
    assert_eq!(bitfield.val2(), u4::new(0));
    assert_eq!(bitfield.val3(), u4::new(0));
    assert_eq!(bitfield.raw_value(), 0);

    let bitfield_with_values = BitfieldU32::new_with_raw_value(0x1234_5678);

    assert_eq!(bitfield_with_values.val0(), 0x5678);
    assert_eq!(bitfield_with_values.val1(), 0x34);
    assert_eq!(bitfield_with_values.val2(), u4::new(0x2));
    assert_eq!(bitfield_with_values.val3(), u4::new(0x1));
    assert_eq!(bitfield_with_values.raw_value(), 0x1234_5678);
}