Skip to content

Commit 471ddb6

Browse files
committed
feat: adding a shorthand field option when only offset is specified
1 parent b1ec7c8 commit 471ddb6

File tree

2 files changed

+20
-2
lines changed

2 files changed

+20
-2
lines changed

raw_struct/tests/attr.rs

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,17 @@ fn test_getter_rename() {
99
struct Dummy {
1010
#[field(offset = 0x00, getter = "get_field_d")]
1111
field_a: u64,
12+
13+
#[field(0x08)]
14+
field_b: u64,
1215
}
1316

17+
// #[raw_struct(size = 0x08, resolver = "my_dummy_function")]
18+
// struct Dummy2 {
19+
// #[field(0x00)]
20+
// field_my_flag: bool,
21+
// }
22+
1423
let instance = Copy::<Dummy>::new([0x00; 0x08]);
1524
instance.get_field_d().unwrap();
1625
}

raw_struct_derive/src/derive_raw_struct.rs

Lines changed: 11 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ use quote::{
88
};
99
use syn::{
1010
parse::{
11+
discouraged::Speculative,
1112
Parse,
1213
ParseStream,
1314
},
@@ -52,8 +53,16 @@ struct FieldArgs {
5253

5354
impl Parse for FieldArgs {
5455
fn parse(input: ParseStream) -> syn::Result<Self> {
55-
let vars: Punctuated<MetaNameValue, syn::token::Comma> =
56-
Punctuated::<MetaNameValue, Token![,]>::parse_terminated(input)?;
56+
let fork = input.fork();
57+
let Ok(vars) = fork.call(Punctuated::<MetaNameValue, Token![,]>::parse_terminated) else {
58+
/* the input is already the offset value */
59+
return Ok(Self {
60+
offset: input.parse()?,
61+
getter: None,
62+
_setter: None,
63+
});
64+
};
65+
input.advance_to(&fork);
5766

5867
let mut offset = None;
5968

0 commit comments

Comments
 (0)