Skip to main content

doido_controller_macros/
lib.rs

1mod codegen;
2mod controller;
3mod parser;
4
5use proc_macro::TokenStream;
6use syn::parse_macro_input;
7
8/// Expands the `routes!` DSL (verbs, `resources!`, `namespace!`, `scope!`)
9/// into an `axum::Router`. Merged in from the former `doido-router` crate.
10#[proc_macro]
11pub fn routes(input: TokenStream) -> TokenStream {
12    let parsed = parse_macro_input!(input as parser::RoutesInput);
13    codegen::generate(parsed).into()
14}
15
16/// Marks an impl block as a controller. Rewrites action methods into
17/// axum-compatible handlers with filter chain support.
18#[proc_macro_attribute]
19pub fn controller(attr: TokenStream, item: TokenStream) -> TokenStream {
20    match controller::expand_controller(attr.into(), item.into()) {
21        Ok(ts) => ts.into(),
22        Err(e) => e.to_compile_error().into(),
23    }
24}
25
26/// Registers a before-action filter on the following action method.
27/// Usage: `#[before_action(fn_name)]` or `#[before_action(fn_name, only = [action1, action2])]`
28#[proc_macro_attribute]
29pub fn before_action(_attr: TokenStream, item: TokenStream) -> TokenStream {
30    item
31}
32
33/// Registers an after-action filter on the following action method.
34/// Usage: `#[after_action(fn_name)]`
35#[proc_macro_attribute]
36pub fn after_action(_attr: TokenStream, item: TokenStream) -> TokenStream {
37    item
38}