use binrw::{binrw, io::Cursor, BinWrite}; #[test] fn correct_args_type_set() { #[derive(BinWrite)] #[bw(import { _x: u32, _y: u8 })] struct Test {} let mut x = Cursor::new(Vec::new()); Test {} .write_le_args(&mut x, binrw::args! { _x: 3, _y: 2 }) .unwrap(); } #[test] fn gat_list() { #[derive(BinWrite)] #[bw(little, import(borrowed: &u8))] struct Test { #[bw(map = |a| *a + *borrowed)] a: u8, } let mut out = Cursor::new(Vec::new()); Test { a: 0 }.write_args(&mut out, (&1_u8,)).unwrap(); assert_eq!(out.into_inner(), b"\x01"); } #[test] fn gat_named() { #[derive(BinWrite)] #[bw(little, import { borrowed: &u8 })] struct Test { #[bw(map = |a| *a + *borrowed)] a: u8, } let mut out = Cursor::new(Vec::new()); Test { a: 0 } .write_args(&mut out, binrw::args! { borrowed: &1_u8, }) .unwrap(); assert_eq!(out.into_inner(), b"\x01"); } #[test] fn gat_raw() { #[derive(BinWrite)] #[bw(little, import_raw(borrowed: &u8))] struct Test { #[bw(map = |a| *a + *borrowed)] a: u8, } let mut out = Cursor::new(Vec::new()); Test { a: 0 }.write_args(&mut out, &1_u8).unwrap(); assert_eq!(out.into_inner(), b"\x01"); } #[test] fn shadowed_imports() { #[derive(BinWrite)] #[bw(import { x: u32 })] struct Test { x: u8, } let mut out = Cursor::new(Vec::new()); Test { x: 1 } .write_le_args(&mut out, binrw::args! { x: 2 }) .unwrap(); assert_eq!(out.into_inner(), b"\x01"); } #[test] fn usable_args() { #[binrw] #[bw(import { x: u32, _y: u8 })] struct Test { #[br(temp, ignore)] #[bw(calc = x)] x_copy: u32, } let mut x = Cursor::new(Vec::new()); Test {} .write_le_args(&mut x, binrw::args! { x: 3, _y: 2 }) .unwrap(); }