1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
use std::fmt::{Display, Formatter, Result as FmtResult};

use hyper::Method;

use crate::client::RatelimiterKind;

#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
pub(crate) enum Route {
    Render,
    RenderList,
    ServerList,
    ServerOnlineCount,
    SkinList,
    SkinCustom,
}

impl Route {
    pub fn method(self) -> Method {
        match self {
            Self::Render => Method::POST,
            Self::RenderList
            | Self::ServerList
            | Self::ServerOnlineCount
            | Self::SkinList
            | Self::SkinCustom => Method::GET,
        }
    }

    pub fn ratelimiter(self) -> RatelimiterKind {
        match self {
            Route::Render => RatelimiterKind::SendRender,
            Route::RenderList
            | Route::ServerList
            | Route::ServerOnlineCount
            | Route::SkinList
            | Route::SkinCustom => RatelimiterKind::General,
        }
    }
}

impl Display for Route {
    fn fmt(&self, f: &mut Formatter<'_>) -> FmtResult {
        match self {
            Self::Render | Self::RenderList => f.write_str("renders"),
            Self::ServerList => f.write_str("servers"),
            Self::ServerOnlineCount => f.write_str("servers/onlinecount"),
            Self::SkinList => f.write_str("skins"),
            Self::SkinCustom => f.write_str("skins/custom"),
        }
    }
}