rust_zw3d_macros/
lib.rs

1//! 为 `rust-zw3d` 提供的过程宏。
2//!
3//! - `#[cmd]`:将函数注册为命令,支持多种函数签名。
4//!   - 支持参数:`()`, `(i32)`, `(i32, i32)`, `(&str)`, `(&str, i32)`, `(&str, i32, i32)`
5//!   - 支持返回:`i32` 或 `()`(自动返回 `0`)
6//!   - 形态:`#[cmd]`、`#[cmd("Alias")]`、`#[cmd(name = "Alias", code = expr)]`
7//!   - `name` 默认取函数名;`code` 默认 `ffi::VX_CODE_GENERAL`
8//! - `#[callback]`:将 `fn(&str,i32,i32)->i32` 的函数注册为回调。
9//!   - 形态:`#[callback]`、`#[callback("Name")]`
10
11mod cmd;
12
13/// 将函数注册为 ZW3D 命令(收集到 `inventory`,由 `register_commands!` 统一注册)。
14#[proc_macro_attribute]
15pub fn cmd(
16    attr: proc_macro::TokenStream,
17    item: proc_macro::TokenStream,
18) -> proc_macro::TokenStream {
19    cmd::cmd_impl(attr, item)
20}
21
22/// 将函数注册为 ZW3D 回调(生成 `extern "C"` 包装函数,并收集注册)。
23#[proc_macro_attribute]
24pub fn callback(
25    attr: proc_macro::TokenStream,
26    item: proc_macro::TokenStream,
27) -> proc_macro::TokenStream {
28    cmd::callback_impl(attr, item)
29}