diff --git a/binrw/tests/derive/struct.rs b/binrw/tests/derive/struct.rs index 338b3f6b..6429a3dd 100644 --- a/binrw/tests/derive/struct.rs +++ b/binrw/tests/derive/struct.rs @@ -631,6 +631,27 @@ fn parse_with_default_args() { ); } +#[test] +fn args_type_hint_borrowck() { + #[derive(BinRead, Debug, PartialEq)] + #[br(import(a: u8))] + struct NeedsArgs(#[br(map = |x: u8| x + a)] u8); + + #[derive(BinRead, Debug, PartialEq)] + struct Test { + #[br(args(4), parse_with = binrw::helpers::until(|x| x == &NeedsArgs(4)))] + a: Vec, + } + + let result = Test::read_le(&mut Cursor::new(b"\x01\x00\x02")).unwrap(); + assert_eq!( + result, + Test { + a: vec![NeedsArgs(5), NeedsArgs(4)] + } + ); +} + #[test] fn args_same_name() { #[allow(dead_code)] diff --git a/binrw_derive/src/binrw/codegen/read_options/struct.rs b/binrw_derive/src/binrw/codegen/read_options/struct.rs index 10a3114d..7294b853 100644 --- a/binrw_derive/src/binrw/codegen/read_options/struct.rs +++ b/binrw_derive/src/binrw/codegen/read_options/struct.rs @@ -387,7 +387,7 @@ impl<'field> FieldGenerator<'field> { if let FieldMode::Function(_) = &self.field.field_mode { quote_spanned! {ty.span()=> - let #args_var = #ARGS_TYPE_HINT::(#READ_FUNCTION, #args); + let #args_var = #ARGS_TYPE_HINT::(&#READ_FUNCTION, #args); } } else { match &self.field.map {