bw-web-api-rs 0.2.8

A Rust client for the StarCraft: Remastered API
Documentation
use serde::{Deserialize, Deserializer, Serialize};
use std::str::FromStr;

#[repr(u32)]
#[derive(Debug, Serialize, Clone, Copy, PartialEq, Eq, Hash)]
pub enum Gateway {
    USWest = 10,
    USEast = 11,
    Europe = 20,
    Korea = 30,
    Asia = 45,
}

impl<'de> Deserialize<'de> for Gateway {
    fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
    where
        D: Deserializer<'de>,
    {
        #[derive(Deserialize)]
        #[serde(untagged)]
        enum GatewayId {
            Num(i32),
            Str(String),
        }

        let gateway_id = GatewayId::deserialize(deserializer)?;

        let id = match gateway_id {
            GatewayId::Num(n) => n,
            GatewayId::Str(s) => i32::from_str(&s).map_err(serde::de::Error::custom)?,
        };

        match id {
            10 => Ok(Gateway::USWest),
            11 => Ok(Gateway::USEast),
            20 => Ok(Gateway::Europe),
            30 => Ok(Gateway::Korea),
            45 => Ok(Gateway::Asia),
            other => Err(serde::de::Error::custom(format!(
                "Unknown gateway id: {}",
                other
            ))),
        }
    }
}

#[repr(i32)]
#[derive(Debug, Clone, Copy)]
pub enum Leaderboard {
    Global = 12978,
    USWest = 12979,
    USEast = 12980,
    Europe = 12981,
    Korea = 12982,
    Asia = 12983,
}