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}