bitwrap 2.0.2

pack/unpack data into byte array
Documentation
#![no_std]

use {
    core::convert::{
        TryFrom,
        Infallible,
    },
    bitwrap::*,
};


#[test]
fn test_readme_convert() {
    #[derive(Debug, PartialEq, Clone, Copy)]
    enum Coffee {
        Water,
        Latte,
        Cappuccino,
        Espresso,
        Americano,
    }

    impl Default for Coffee {
        fn default() -> Self { Coffee::Water }
    }

    impl TryFrom<u8> for Coffee {
        type Error = BitWrapError;

        fn try_from(value: u8) -> Result<Self, Self::Error> {
            match value {
                0 => Ok(Coffee::Water),
                1 => Ok(Coffee::Latte),
                2 => Ok(Coffee::Cappuccino),
                3 => Ok(Coffee::Espresso),
                4 => Ok(Coffee::Americano),
                _ => Err(BitWrapError),
            }
        }
    }

    impl TryFrom<Coffee> for u8 {
        type Error = Infallible;

        fn try_from(value: Coffee) -> Result<Self, Self::Error> {
            match value {
                Coffee::Water => Ok(0),
                Coffee::Latte => Ok(1),
                Coffee::Cappuccino => Ok(2),
                Coffee::Espresso => Ok(3),
                Coffee::Americano => Ok(4),
            }
        }
    }

    #[derive(Default, BitWrap)]
    struct Packet {
        #[bitfield(4, name = _reserved, value = 0)]
        #[bitfield(4)]
        coffee: Coffee,
    }

    const DATA: &[u8] = &[0x01];

    let mut packet = Packet::default();
    packet.unpack(DATA).unwrap();

    assert_eq!(packet.coffee, Coffee::Latte);

    let mut buffer: [u8; 1] = [0; 1];
    let result = packet.pack(&mut buffer).unwrap();

    assert_eq!(&buffer[.. result], DATA);
}