bw_web_api_rs/
types.rs

1use std::str::FromStr;
2use serde::{Deserialize, Deserializer, Serialize};
3
4#[repr(u32)]
5#[derive(Debug, Serialize, Clone, Copy, PartialEq, Eq, Hash)]
6pub enum Gateway {
7    USWest = 10,
8    USEast = 11,
9    Europe = 20,
10    Korea = 30,
11    Asia = 45,
12}
13
14impl<'de> Deserialize<'de> for Gateway {
15    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
16    where
17        D: Deserializer<'de>,
18    {
19        #[derive(Deserialize)]
20        #[serde(untagged)]
21        enum GatewayId {
22            Num(i32),
23            Str(String),
24        }
25
26        let gateway_id = GatewayId::deserialize(deserializer)?;
27        
28        let id = match gateway_id {
29            GatewayId::Num(n) => n,
30            GatewayId::Str(s) => i32::from_str(&s).map_err(serde::de::Error::custom)?,
31        };
32
33        match id {
34            10 => Ok(Gateway::USWest),
35            11 => Ok(Gateway::USEast),
36            20 => Ok(Gateway::Europe),
37            30 => Ok(Gateway::Korea),
38            45 => Ok(Gateway::Asia),
39            other => Err(serde::de::Error::custom(format!(
40                "Unknown gateway id: {}", 
41                other
42            ))),
43        }
44    }
45}
46
47#[repr(i32)]
48#[derive(Debug, Clone, Copy)]
49pub enum Leaderboard {
50    Global = 12960,
51    USWest = 12961,
52    USEast = 12962,
53    Europe = 12963,
54    Korea = 12964,
55    Asia = 12965,
56}