use binrw::{io::Cursor, BinWrite};
#[derive(BinWrite)]
struct TestEndian {
x: u16,
#[bw(little)]
y: u16,
#[bw(is_big = true)]
z: u32,
#[bw(is_big = false)]
not_z: u32,
}
#[test]
fn write_endian() {
let mut x = Cursor::new(Vec::new());
TestEndian {
x: 1,
y: 2,
z: 3,
not_z: 3,
}
.write_be(&mut x)
.unwrap();
assert_eq!(x.into_inner(), [0, 1, 2, 0, 0, 0, 0, 3, 3, 0, 0, 0]);
}
#[test]
fn top_level_endian() {
#[derive(BinWrite)]
#[bw(is_big = true)]
struct Test {
#[bw(big)] little: TestLittle,
big: TestInheritBig,
}
#[derive(BinWrite)]
#[bw(little)]
struct TestLittle {
x: u16,
y: u32,
}
#[derive(BinWrite)]
struct TestInheritBig {
x: u16,
y: u32,
}
let mut x = Cursor::new(Vec::new());
Test {
little: TestLittle { x: 1, y: 2 },
big: TestInheritBig { x: 3, y: 4 },
}
.write(&mut x)
.unwrap();
assert_eq!(x.into_inner(), [1, 0, 2, 0, 0, 0, 0, 3, 0, 0, 0, 4]);
}