Skip to content

Commit 232916c

Browse files
authored
refactor(macro): use #[php] attribute for startup function
This unifies the behaviour of the `#[php_module]` macro and the other `#[php_*]` macros. Refs: #423
1 parent 1aa0e99 commit 232916c

File tree

5 files changed

+20
-19
lines changed

5 files changed

+20
-19
lines changed

crates/macros/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -499,10 +499,10 @@ pub fn php_const(_args: TokenStream, input: TokenStream) -> TokenStream {
499499
/// # fn main() {}
500500
/// ```
501501
#[proc_macro_attribute]
502-
pub fn php_module(args: TokenStream, input: TokenStream) -> TokenStream {
502+
pub fn php_module(_args: TokenStream, input: TokenStream) -> TokenStream {
503503
let input = parse_macro_input!(input as ItemFn);
504504

505-
module::parser(args.into(), input)
505+
module::parser(input)
506506
.unwrap_or_else(|e| e.to_compile_error())
507507
.into()
508508
}

crates/macros/src/module.rs

Lines changed: 8 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,23 @@
1-
use darling::{ast::NestedMeta, FromMeta};
1+
use darling::FromAttributes;
22
use proc_macro2::{Ident, TokenStream};
33
use quote::quote;
44
use syn::{ItemFn, Signature};
55

66
use crate::prelude::*;
77

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 {
1211
startup: Option<Ident>,
1312
}
1413

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> {
2115
let ItemFn { sig, block, .. } = input;
2216
let Signature { output, inputs, .. } = sig;
2317
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 {
2521
quote! { #startup(ty, mod_num) }
2622
} else {
2723
quote! { 0i32 }

examples/hello_world.rs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,8 @@ fn startup(_ty: i32, mod_num: i32) -> i32 {
7676
0
7777
}
7878

79-
#[php_module(startup = "startup")]
79+
#[php_module]
80+
#[php(startup = startup)]
8081
pub fn get_module(module: ModuleBuilder) -> ModuleBuilder {
8182
module
8283
.class::<TestClass>()

guide/src/ini-settings.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,8 @@ pub fn startup(ty: i32, mod_num: i32) -> i32 {
2727
0
2828
}
2929
30-
#[php_module(startup = "startup")]
30+
#[php_module]
31+
#[php(startup = "startup")]
3132
pub fn get_module(module: ModuleBuilder) -> ModuleBuilder {
3233
module
3334
}
@@ -54,7 +55,8 @@ pub fn startup(ty: i32, mod_num: i32) -> i32 {
5455
0
5556
}
5657
57-
#[php_module(startup = "startup")]
58+
#[php_module]
59+
#[php(startup = "startup")]
5860
pub fn get_module(module: ModuleBuilder) -> ModuleBuilder {
5961
module
6062
}

guide/src/migration-guides/v0.14.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ register functions, classes, constants and startup function when declaring
1515
the module.
1616

1717
```rs
18-
#[php_module(startup = "startup_function")]
18+
#[php_module]
19+
#[php(startup = "startup_function")]
1920
pub fn get_module(module: ModuleBuilder) -> ModuleBuilder {
2021
module
2122
.class::<TestClass>()
@@ -174,7 +175,8 @@ fn startup_function(ty: i32, mod_num: i32) -> i32 {
174175
0
175176
}
176177

177-
#[php_module(startup = "startup_function")]
178+
#[php_module]
179+
#[php(startup = "startup_function")]
178180
pub fn get_module(module: ModuleBuilder) -> ModuleBuilder {
179181
module
180182
}

0 commit comments

Comments
 (0)