use binrw::{io::Cursor, BinRead, BinReaderExt, BinWrite, Endian};
#[test]
fn enum_round_trip() {
#[derive(BinRead, BinWrite)]
#[brw(big)]
enum Test {
#[brw(magic = b"AAA")]
A {
#[brw(little)]
x: u32,
y: u8,
},
#[brw(little, magic = b"BBB")]
B {
x: u32,
#[brw(big)]
y: u16,
},
#[brw(magic = b"CCC")]
C,
}
let data = b"AAA\x03\x02\x01\0\xFFBBB\xBB\xAA\0\0\0\x02CCC";
let test: [Test; 3] = Cursor::new(data).read_be().unwrap();
let mut x = Cursor::new(Vec::new());
test.write_options(&mut x, Endian::Big, ()).unwrap();
assert_eq!(x.into_inner(), data);
}
#[test]
fn enum_one_way() {
#[derive(BinWrite)]
#[brw(big)]
enum Test {
#[brw(magic = b"AAA")]
A {
#[brw(little)]
x: u32,
y: u8,
},
#[brw(little, magic = b"BBB")]
B(u32, #[brw(big)] u16),
#[brw(magic = b"CCC")]
C,
}
let mut x = Cursor::new(Vec::new());
[
Test::B(0xAABB, 0x2),
Test::C,
Test::A {
x: 0x10203,
y: 0xFF,
},
]
.write_options(&mut x, Endian::Big, ())
.unwrap();
assert_eq!(
x.into_inner(),
b"BBB\xBB\xAA\0\0\0\x02CCCAAA\x03\x02\x01\0\xFF"
);
}