use std::fmt;
use std::str::FromStr;
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)]
pub enum Region {
#[default]
Global,
AE,
AP,
AU,
CA,
DE,
EU,
EU2,
FR,
JP,
US,
LA,
RU,
CN,
}
impl Region {
pub const fn base_url(&self) -> &'static str {
match self {
Region::Global => "https://api.libreview.io",
Region::AE => "https://api-ae.libreview.io",
Region::AP => "https://api-ap.libreview.io",
Region::AU => "https://api-au.libreview.io",
Region::CA => "https://api-ca.libreview.io",
Region::DE => "https://api-de.libreview.io",
Region::EU => "https://api-eu.libreview.io",
Region::EU2 => "https://api-eu2.libreview.io",
Region::FR => "https://api-fr.libreview.io",
Region::JP => "https://api-jp.libreview.io",
Region::US => "https://api-us.libreview.io",
Region::LA => "https://api-la.libreview.io",
Region::RU => "https://api.libreview.ru",
Region::CN => "https://api-cn.myfreestyle.cn",
}
}
pub const fn as_str(&self) -> &'static str {
match self {
Region::Global => "global",
Region::AE => "ae",
Region::AP => "ap",
Region::AU => "au",
Region::CA => "ca",
Region::DE => "de",
Region::EU => "eu",
Region::EU2 => "eu2",
Region::FR => "fr",
Region::JP => "jp",
Region::US => "us",
Region::LA => "la",
Region::RU => "ru",
Region::CN => "cn",
}
}
}
impl FromStr for Region {
type Err = std::convert::Infallible;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let region = match s.to_lowercase().as_str() {
"us" => Region::US,
"eu" => Region::EU,
"eu2" => Region::EU2,
"fr" => Region::FR,
"jp" => Region::JP,
"de" => Region::DE,
"ap" => Region::AP,
"au" => Region::AU,
"ae" => Region::AE,
"ca" => Region::CA,
"la" => Region::LA,
"ru" => Region::RU,
"cn" => Region::CN,
_ => Region::Global,
};
Ok(region)
}
}
impl fmt::Display for Region {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "{}", self.as_str())
}
}
impl AsRef<str> for Region {
fn as_ref(&self) -> &str {
self.as_str()
}
}