use modular_bitfield_msb::prelude::*;
use modular_bitfield_msb::error::OutOfBounds;
#[bitfield]
#[derive(Debug, PartialEq)]
pub struct MyTwoBytes {
a: B1,
b: B2,
c: B13,
}
fn main() {
let mut bitfield = MyTwoBytes::new();
assert_eq!(bitfield.a(), 0);
assert_eq!(bitfield.b(), 0);
assert_eq!(bitfield.c(), 0);
assert_eq!(bitfield.set_a_checked(2), Err(OutOfBounds));
assert_eq!(bitfield.set_b_checked(4), Err(OutOfBounds));
assert_eq!(bitfield.set_c_checked(12345), Err(OutOfBounds));
assert_eq!(bitfield.a(), 0);
assert_eq!(bitfield.b(), 0);
assert_eq!(bitfield.c(), 0);
assert_eq!(bitfield.set_a_checked(1), Ok(()));
assert_eq!(bitfield.set_b_checked(3), Ok(()));
assert_eq!(bitfield.set_c_checked(42), Ok(()));
assert_eq!(bitfield.a(), 1);
assert_eq!(bitfield.b(), 3);
assert_eq!(bitfield.c(), 42);
assert_eq!(MyTwoBytes::new().with_a_checked(2), Err(OutOfBounds));
assert_eq!(MyTwoBytes::new().with_a_checked(1).unwrap().with_b_checked(4), Err(OutOfBounds));
let bitfield = bitfield
.with_a_checked(0).unwrap()
.with_b_checked(2).unwrap();
assert_eq!(bitfield.a(), 0);
assert_eq!(bitfield.b(), 2);
assert_eq!(bitfield.c(), 42);
}