Skip to main content

doido_auth_macros/
lib.rs

1mod api_mode;
2mod auth_controller;
3mod routes;
4
5use doido_auth_route_dsl::{expand_auth_route_decls, expand_auth_routes};
6use proc_macro::TokenStream;
7
8/// Standalone Devise-style auth router (`.merge(doido_auth::auth_routes!(User))`).
9#[proc_macro]
10pub fn auth_routes(input: TokenStream) -> TokenStream {
11    expand_auth_routes(input.into(), api_mode::api_only()).into()
12}
13
14/// Internal: expands to `get!`/`post!`/… lines consumed by [`doido_auth::routes!`].
15#[proc_macro]
16pub fn __auth_routes_decl(input: TokenStream) -> TokenStream {
17    expand_auth_route_decls(input.into(), api_mode::api_only()).into()
18}
19
20/// Marks an auth controller impl, preserving generic type parameters (unlike
21/// `doido_controller::controller` on `impl<U> …`).
22#[proc_macro_attribute]
23pub fn auth_controller(attr: TokenStream, item: TokenStream) -> TokenStream {
24    match auth_controller::expand_auth_controller(attr.into(), item.into()) {
25        Ok(ts) => ts.into(),
26        Err(e) => e.to_compile_error().into(),
27    }
28}
29
30/// Application route table with Devise-style `auth_routes!` (like `devise_for`).
31#[proc_macro]
32pub fn routes(input: TokenStream) -> TokenStream {
33    routes::expand_routes(input.into(), api_mode::api_only()).into()
34}