1#[macro_export]
2macro_rules! handler {
3 ($fn_name:ident) => {
4 paste::paste! {
5 pub struct [<$fn_name:camel Handler>];
6
7 #[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 paste::paste! {
28 pub struct [<$fn_name:camel Middleware>];
29
30 #[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 paste::paste! {
47 pub struct [<$fn_name:camel ErrorHandler>];
48
49 #[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 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 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 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 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 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 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 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 paste::paste! {
134 $crate::error!($fn_name);
135
136 $app.set_error_handler([<$fn_name:camel>]);
137 }
138 };
139}