rosu_render/
routing.rs

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}