1use std::fmt::{Display, Formatter, Result as FmtResult};
2
3use hyper::Method;
4
5use crate::client::RatelimiterKind;
6
7#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
8pub(crate) enum Route {
9 Render,
10 RenderList,
11 ServerList,
12 ServerOnlineCount,
13 SkinList,
14 SkinCustom,
15 UserPreset,
16}
17
18impl Route {
19 pub fn method(self) -> Method {
20 match self {
21 Self::Render => Method::POST,
22 Self::RenderList
23 | Self::ServerList
24 | Self::ServerOnlineCount
25 | Self::SkinList
26 | Self::SkinCustom
27 | Self::UserPreset => Method::GET,
28 }
29 }
30
31 pub fn ratelimiter(self) -> RatelimiterKind {
32 match self {
33 Route::Render => RatelimiterKind::SendRender,
34 Route::RenderList
35 | Route::ServerList
36 | Route::ServerOnlineCount
37 | Route::SkinList
38 | Route::SkinCustom
39 | Route::UserPreset => RatelimiterKind::General,
40 }
41 }
42}
43
44impl Display for Route {
45 fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
46 match self {
47 Self::Render | Self::RenderList => f.write_str("renders"),
48 Self::ServerList => f.write_str("servers"),
49 Self::ServerOnlineCount => f.write_str("servers/onlinecount"),
50 Self::SkinList => f.write_str("skins"),
51 Self::SkinCustom => f.write_str("skins/custom"),
52 Self::UserPreset => f.write_str("presets/bot"),
53 }
54 }
55}