|
1 |
| -use darling::{ast::NestedMeta, FromMeta}; |
| 1 | +use darling::FromAttributes; |
2 | 2 | use proc_macro2::{Ident, TokenStream};
|
3 | 3 | use quote::quote;
|
4 | 4 | use syn::{ItemFn, Signature};
|
5 | 5 |
|
6 | 6 | use crate::prelude::*;
|
7 | 7 |
|
8 |
| -#[derive(Debug, Default, FromMeta)] |
9 |
| -#[darling(default)] |
10 |
| -pub struct ModuleArgs { |
11 |
| - /// Optional function that will be called when the module starts up. |
| 8 | +#[derive(FromAttributes, Default, Debug)] |
| 9 | +#[darling(default, attributes(php))] |
| 10 | +pub(crate) struct PhpModuleAttribute { |
12 | 11 | startup: Option<Ident>,
|
13 | 12 | }
|
14 | 13 |
|
15 |
| -pub fn parser(args: TokenStream, input: ItemFn) -> Result<TokenStream> { |
16 |
| - let meta = NestedMeta::parse_meta_list(args)?; |
17 |
| - let opts = match ModuleArgs::from_list(&meta) { |
18 |
| - Ok(opts) => opts, |
19 |
| - Err(e) => bail!(input => "Failed to parse attribute options: {:?}", e), |
20 |
| - }; |
| 14 | +pub fn parser(input: ItemFn) -> Result<TokenStream> { |
21 | 15 | let ItemFn { sig, block, .. } = input;
|
22 | 16 | let Signature { output, inputs, .. } = sig;
|
23 | 17 | let stmts = &block.stmts;
|
24 |
| - let startup = if let Some(startup) = opts.startup { |
| 18 | + |
| 19 | + let attr = PhpModuleAttribute::from_attributes(&input.attrs)?; |
| 20 | + let startup = if let Some(startup) = attr.startup { |
25 | 21 | quote! { #startup(ty, mod_num) }
|
26 | 22 | } else {
|
27 | 23 | quote! { 0i32 }
|
|
0 commit comments