Skip to main content

bolt_web/
macros.rs

1#[macro_export]
2macro_rules! handler {
3    ($fn_name:ident) => {
4        $crate::paste::paste! {
5            pub struct [<$fn_name:camel Handler>];
6
7            #[$crate::async_trait::async_trait]
8            impl $crate::types::Handler for [<$fn_name:camel Handler>] {
9                async fn run(
10                    &self,
11                    req: &mut $crate::request::RequestBody,
12                    res: &mut $crate::response::ResponseWriter
13                ) {
14                    $fn_name(req, res).await;
15                }
16            }
17            #[allow(non_upper_case_globals)]
18            pub const [<$fn_name:camel>]: [<$fn_name:camel Handler>] = [<$fn_name:camel Handler>];
19
20        }
21    };
22}
23
24#[macro_export]
25macro_rules! middleware {
26    ($fn_name:ident) => {
27        $crate::paste::paste! {
28            pub struct [<$fn_name:camel Middleware>];
29
30            #[$crate::async_trait::async_trait]
31            impl $crate::types::Middleware for [<$fn_name:camel Middleware>] {
32                async fn run(&self, req: &mut $crate::request::RequestBody, res: &mut $crate::response::ResponseWriter) {
33                    $fn_name(req, res).await;
34                }
35            }
36
37            #[allow(dead_code, non_upper_case_globals)]
38            pub const [<$fn_name:camel>]: [<$fn_name:camel Middleware>] = [<$fn_name:camel Middleware>];
39        }
40    };
41}
42
43#[macro_export]
44macro_rules! error {
45    ($fn_name:ident) => {
46        $crate::paste::paste! {
47            pub struct [<$fn_name:camel ErrorHandler>];
48
49            #[$crate::async_trait::async_trait]
50            impl $crate::types::ErrorHandler for [<$fn_name:camel ErrorHandler>] {
51                async fn run(&self, msg: String, res: &mut $crate::response::ResponseWriter) {
52                    $fn_name(msg,res).await;
53                }
54            }
55
56            #[allow(non_upper_case_globals, dead_code)]
57            pub const [<$fn_name:camel>]: [<$fn_name:camel ErrorHandler>] = [<$fn_name:camel ErrorHandler>];
58        }
59    };
60}
61
62#[macro_export]
63macro_rules! Get {
64    ($app:ident, $path:expr, $fn_name:ident) => {
65        $crate::paste::paste! {
66            $crate::handler!($fn_name);
67        $app.get($path, [<$fn_name:camel>]);
68        }
69    };
70}
71
72#[macro_export]
73macro_rules! Post {
74    ($app:ident, $path:expr, $fn_name:ident) => {
75        $crate::paste::paste! {
76            $crate::handler!($fn_name);
77        $app.post($path, [<$fn_name:camel>]);
78        }
79    };
80}
81
82#[macro_export]
83macro_rules! Patch {
84    ($app:ident, $path:expr, $fn_name:ident) => {
85        $crate::paste::paste! {
86            $crate::handler!($fn_name);
87        $app.patch($path, [<$fn_name:camel>]);
88        }
89    };
90}
91
92#[macro_export]
93macro_rules! Put {
94    ($app:ident, $path:expr, $fn_name:ident) => {
95        $crate::paste::paste! {
96            $crate::handler!($fn_name);
97        $app.put($path, [<$fn_name:camel>]);
98        }
99    };
100}
101
102#[macro_export]
103macro_rules! Delete {
104    ($app:ident, $path:expr, $fn_name:ident) => {
105        $crate::paste::paste! {
106            $crate::handler!($fn_name);
107        $app.delete($path, [<$fn_name:camel>]);
108        }
109    };
110}
111
112#[macro_export]
113macro_rules! Middleware {
114    ($app:ident, $path:expr, $method:ident ,$fn_name:ident) => {
115        $crate::paste::paste! {
116            $crate::middleware!($fn_name);
117
118            $app.middleware($path, Some($crate::types::Method::$method) , [<$fn_name:camel>]);
119        }
120    };
121
122    ($app:ident, $path:expr ,$fn_name:ident) => {
123        $crate::paste::paste! {
124            $crate::middleware!($fn_name);
125            $app.middleware($path, None , [<$fn_name:camel>]);
126        }
127    };
128}
129
130#[macro_export]
131macro_rules! Error {
132    ($app:ident,$fn_name:ident) => {
133        $crate::paste::paste! {
134            $crate::error!($fn_name);
135
136            $app.set_error_handler([<$fn_name:camel>]);
137        }
138    };
139}