|
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