deku 0.20.3

bit level serialization/deserialization proc-macro for structs
Documentation
#![cfg(all(feature = "alloc", feature = "bits"))]

use deku::prelude::*;
use rstest::*;

#[derive(Debug, Default, PartialEq, DekuWrite, DekuRead)]
#[deku(endian = "big")]
struct Test {
    #[deku(bits = 4)]
    field_u8_be: u8,
    #[deku(bits = 4)]
    field_be: u16,
    #[deku(endian = "little", bits = 12)]
    field_le: u32,
    #[deku(endian = "big", bits = 9)]
    field_u32_be: u32,
}

#[rstest(input,
    #[should_panic(
        expected = "bit size of input is larger than bit requested size"
    )]
    case::field_u8_be( Test { field_u8_be: 0b11111, ..Test::default()}),
    #[should_panic(
        expected = "bit size of input is larger than bit requested size"
    )]
    case::field_be( Test { field_be: 0b11111, ..Test::default()}),
    #[should_panic(
        expected = "bit size of input is larger than requested size"
    )]
    case::field_le( Test { field_le: 0b1111111111111, ..Test::default()}),
    #[should_panic(
        expected = "bit size of input is larger than bit requested size"
    )]
    case::field_u32_be( Test { field_u32_be: 0b1111111111111, ..Test::default()}),
)]
fn test_bit_container_to_big(input: Test) {
    input.to_bytes().unwrap();
}