Skip to content

Commit ec5735a

Browse files
committed
Pull stateless prepare out of class construction.
1 parent ccd81eb commit ec5735a

File tree

1 file changed

+19
-9
lines changed

1 file changed

+19
-9
lines changed

crates/macros/src/class.rs

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,10 +41,7 @@ pub struct AttrArgs {
4141
flags: Option<Expr>,
4242
}
4343

44-
pub fn parser(args: AttributeArgs, mut input: ItemStruct) -> Result<TokenStream> {
45-
let args = AttrArgs::from_list(&args)
46-
.map_err(|e| anyhow!("Unable to parse attribute arguments: {:?}", e))?;
47-
44+
fn prepare(args: AttrArgs, mut input: ItemStruct) -> Result<(TokenStream, Class)> {
4845
let mut parent = None;
4946
let mut interfaces = vec![];
5047
let mut properties = HashMap::new();
@@ -132,6 +129,23 @@ pub fn parser(args: AttributeArgs, mut input: ItemStruct) -> Result<TokenStream>
132129
..Default::default()
133130
};
134131

132+
Ok((
133+
quote! {
134+
#input
135+
136+
::ext_php_rs::class_derives!(#ident);
137+
},
138+
class,
139+
))
140+
}
141+
142+
pub fn parser(args: AttributeArgs, input: ItemStruct) -> Result<TokenStream> {
143+
let args = AttrArgs::from_list(&args)
144+
.map_err(|e| anyhow!("Unable to parse attribute arguments: {:?}", e))?;
145+
146+
let ident = &input.ident.clone();
147+
let (tokens, class) = prepare(args, input)?;
148+
135149
let mut state = STATE.lock();
136150

137151
if state.built_module {
@@ -144,11 +158,7 @@ pub fn parser(args: AttributeArgs, mut input: ItemStruct) -> Result<TokenStream>
144158

145159
state.classes.insert(ident.to_string(), class);
146160

147-
Ok(quote! {
148-
#input
149-
150-
::ext_php_rs::class_derives!(#ident);
151-
})
161+
Ok(tokens)
152162
}
153163

154164
#[derive(Debug)]

0 commit comments

Comments
 (0)