pub trait GlobalMacroExpander:
Fn(&MacroExprFactory<'_>, Vec<Expr>) -> Option<Expr>
+ Send
+ Sync { }Expand description
Trait for global macro expansion functions.
A global macro expander receives a list of arguments and produces a transformed expression. Global macros are triggered by function calls, not method calls.
§Type Requirements
The expander function must be:
Fn(&mut MacroExprFactory, Vec<Expr>) -> Option<Expr>: The expansion signatureSend + Sync: Thread-safe for use in concurrent environments'static: No borrowed references in the closure
§Return Value
Some(expr): The macro expansion succeeded andexprreplaces the original callNone: The macro cannot be expanded (keeps the original expression)
§Examples
// Simple constant-folding macro
fn optimize_add(factory: &mut MacroExprFactory, args: Vec<Expr>) -> Option<Expr> {
if args.len() != 2 {
return None;
}
// If both args are constant integers, fold them
let left = args[0].kind()?.as_constant()?.as_int()?;
let right = args[1].kind()?.as_constant()?.as_int()?;
Some(factory.new_const(left + right))
}