mutiny_rs/http/
routing.rs1use reqwest::Method;
2
3macro_rules! api_routes {
4 (
5 $(
6 $variant:ident
7 $( { $($arg:ident : $typ:ty),* $(,)? } )?
8 => $method:ident, $path:literal
9 $(, $fmt_arg:ident)*
10 );* $(;)?
11 ) => {
12 pub enum Route<'a> {
13 $(
14 $variant $( { $($arg: $typ),* } )?,
15 )*
16 }
17
18 impl<'a> Route<'a> {
19 #[allow(unused_variables)]
20 pub fn method(&self) -> Method {
21 match self {
22 $(
23 Self::$variant $( { $($arg),* } )? => Method::$method,
24 )*
25 }
26 }
27
28 pub fn path(&self) -> String {
29 match self {
30 $(
31 Self::$variant $( { $($arg),* } )? => format!($path, $($fmt_arg),*),
32 )*
33 }
34 }
35 }
36 };
37}
38api_routes! {
39 GetChannel { channel_id: &'a str } => GET, "/channels/{}", channel_id;
41 EditChannel { channel_id: &'a str } => PATCH, "/channels/{}", channel_id;
42 DeleteChannel { channel_id: &'a str } => DELETE, "/channels/{}", channel_id;
43
44 CreateInvite { channel_id: &'a str }
46 => POST, "/channels/{}/invites", channel_id;
47
48 AddRecipient { channel_id: &'a str, user_id: &'a str }
49 => PUT, "/channels/{}/recipients/{}", channel_id, user_id;
50
51 RemoveRecipient { channel_id: &'a str, user_id: &'a str }
52 => DELETE, "/channels/{}/recipients/{}", channel_id, user_id;
53
54 SendMessage { channel_id: &'a str }
56 => POST, "/channels/{}/messages", channel_id;
57
58 FetchMessages { channel_id: &'a str }
59 => GET, "/channels/{}/messages", channel_id;
60
61 EditMessage { channel_id: &'a str, message_id: &'a str }
62 => PATCH, "/channels/{}/messages/{}", channel_id, message_id;
63
64 MessageDelete { channel_id: &'a str, message_id: &'a str }
65 => DELETE, "/channels/{}/messages/{}", channel_id, message_id;
66
67 MessagePin { channel_id: &'a str, message_id: &'a str }
68 => POST, "/channels/{}/messages/{}/pin", channel_id, message_id;
69
70 MessageUnpin { channel_id: &'a str, message_id: &'a str }
71 => DELETE, "/channels/{}/messages/{}/pin", channel_id, message_id;
72
73 FetchMe => GET, "/users/@me";
75 FetchDMs => GET, "/dms/";
76
77 FetchUser { user_id: &'a str } => GET, "/users/{}", user_id;
78 EditUser { user_id: &'a str } => PATCH, "/users/{}", user_id;
79}