Skip to main content

ruest_macros/
lib.rs

1//! Procedural macros for RUEST.
2
3mod controller;
4mod guard;
5mod module;
6mod route;
7mod service;
8
9use proc_macro::TokenStream;
10
11/// Marks a struct as an injectable service.
12#[proc_macro_attribute]
13pub fn service(_attr: TokenStream, item: TokenStream) -> TokenStream {
14    service::expand(item)
15}
16
17/// Declares a NestJS-style module.
18///
19/// ```ignore
20/// #[module(controllers = [UserController], providers = [UserService])]
21/// pub struct UserModule;
22/// ```
23#[proc_macro_attribute]
24pub fn module(attr: TokenStream, item: TokenStream) -> TokenStream {
25    module::expand(attr, item)
26}
27
28/// Marks a struct as an HTTP controller with a path prefix.
29#[proc_macro_attribute]
30pub fn controller(attr: TokenStream, item: TokenStream) -> TokenStream {
31    controller::expand(attr, item)
32}
33
34/// Registers route handlers on a controller `impl` block.
35#[proc_macro_attribute]
36pub fn routes(_attr: TokenStream, item: TokenStream) -> TokenStream {
37    route::expand_routes_impl(item)
38}
39
40#[proc_macro_attribute]
41pub fn get(attr: TokenStream, item: TokenStream) -> TokenStream {
42    route::passthrough_route_method(attr, item)
43}
44
45#[proc_macro_attribute]
46pub fn post(attr: TokenStream, item: TokenStream) -> TokenStream {
47    route::passthrough_route_method(attr, item)
48}
49
50#[proc_macro_attribute]
51pub fn put(attr: TokenStream, item: TokenStream) -> TokenStream {
52    route::passthrough_route_method(attr, item)
53}
54
55#[proc_macro_attribute]
56pub fn patch(attr: TokenStream, item: TokenStream) -> TokenStream {
57    route::passthrough_route_method(attr, item)
58}
59
60#[proc_macro_attribute]
61pub fn delete(attr: TokenStream, item: TokenStream) -> TokenStream {
62    route::passthrough_route_method(attr, item)
63}
64
65/// Marks an async function as middleware (MVP: passthrough).
66#[proc_macro_attribute]
67pub fn middleware(_attr: TokenStream, item: TokenStream) -> TokenStream {
68    item
69}
70
71/// Marks a struct as a DTO (MVP: passthrough).
72#[proc_macro_attribute]
73pub fn dto(_attr: TokenStream, item: TokenStream) -> TokenStream {
74    item
75}
76
77/// Déclare une garde d'autorisation (`impl Guard`).
78///
79/// ```ignore
80/// #[guard(roles = ["admin"])]
81/// pub struct AdminGuard;
82/// ```
83#[proc_macro_attribute]
84pub fn guard(attr: TokenStream, item: TokenStream) -> TokenStream {
85    guard::expand(attr, item)
86}