use std::str::FromStr;
use serde::{Deserialize, Serialize};
use crate::error::Error;
#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum Language {
Af,
Am,
Ar,
As,
Az,
Be,
Bg,
Bn,
Bs,
Ca,
Cs,
Da,
De,
El,
En,
#[serde(rename = "en-GB")]
EnGb,
#[serde(rename = "en-IN")]
EnIn,
Es,
#[serde(rename = "es-419")]
Es419,
#[serde(rename = "es-US")]
EsUs,
Et,
Eu,
Fa,
Fi,
Fil,
Fr,
#[serde(rename = "fr-CA")]
FrCa,
Gl,
Gu,
Hi,
Hr,
Hu,
Hy,
Id,
Is,
It,
Iw,
Ja,
Ka,
Kk,
Km,
Kn,
Ko,
Ky,
Lo,
Lt,
Lv,
Mk,
Ml,
Mn,
Mr,
Ms,
My,
Ne,
Nl,
No,
Or,
Pa,
Pl,
Pt,
#[serde(rename = "pt-PT")]
PtPt,
Ro,
Ru,
Si,
Sk,
Sl,
Sq,
Sr,
#[serde(rename = "sr-Latn")]
SrLatn,
Sv,
Sw,
Ta,
Te,
Th,
Tr,
Uk,
Ur,
Uz,
Vi,
#[serde(rename = "zh-CN")]
ZhCn,
#[serde(rename = "zh-HK")]
ZhHk,
#[serde(rename = "zh-TW")]
ZhTw,
Zu,
}
#[derive(Copy, Clone, Debug, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord, Hash)]
#[serde(rename_all = "UPPERCASE")]
#[non_exhaustive]
pub enum Country {
Ae,
Ar,
At,
Au,
Az,
Ba,
Bd,
Be,
Bg,
Bh,
Bo,
Br,
By,
Ca,
Ch,
Cl,
Co,
Cr,
Cy,
Cz,
De,
Dk,
Do,
Dz,
Ec,
Ee,
Eg,
Es,
Fi,
Fr,
Gb,
Ge,
Gh,
Gr,
Gt,
Hk,
Hn,
Hr,
Hu,
Id,
Ie,
Il,
In,
Iq,
Is,
It,
Jm,
Jo,
Jp,
Ke,
Kh,
Kr,
Kw,
Kz,
La,
Lb,
Li,
Lk,
Lt,
Lu,
Lv,
Ly,
Ma,
Me,
Mk,
Mt,
Mx,
My,
Ng,
Ni,
Nl,
No,
Np,
Nz,
Om,
Pa,
Pe,
Pg,
Ph,
Pk,
Pl,
Pr,
Pt,
Py,
Qa,
Ro,
Rs,
Ru,
Sa,
Se,
Sg,
Si,
Sk,
Sn,
Sv,
Th,
Tn,
Tr,
Tw,
Tz,
Ua,
Ug,
Us,
Uy,
Ve,
Vn,
Ye,
Za,
Zw,
Zz,
}
pub const LANGUAGES: [Language; 83] = [
Language::Af,
Language::Az,
Language::Id,
Language::Ms,
Language::Bs,
Language::Ca,
Language::Da,
Language::De,
Language::Et,
Language::EnIn,
Language::EnGb,
Language::En,
Language::Es,
Language::Es419,
Language::EsUs,
Language::Eu,
Language::Fil,
Language::Fr,
Language::FrCa,
Language::Gl,
Language::Hr,
Language::Zu,
Language::It,
Language::Sw,
Language::Lv,
Language::Lt,
Language::Hu,
Language::Nl,
Language::No,
Language::Uz,
Language::Pl,
Language::PtPt,
Language::Pt,
Language::Ro,
Language::Sq,
Language::Sk,
Language::Sl,
Language::SrLatn,
Language::Fi,
Language::Sv,
Language::Vi,
Language::Tr,
Language::Is,
Language::Cs,
Language::El,
Language::Be,
Language::Bg,
Language::Ky,
Language::Mk,
Language::Mn,
Language::Ru,
Language::Sr,
Language::Uk,
Language::Kk,
Language::Hy,
Language::Iw,
Language::Ur,
Language::Ar,
Language::Fa,
Language::Ne,
Language::Mr,
Language::Hi,
Language::As,
Language::Bn,
Language::Pa,
Language::Gu,
Language::Or,
Language::Ta,
Language::Te,
Language::Kn,
Language::Ml,
Language::Si,
Language::Th,
Language::Lo,
Language::My,
Language::Ka,
Language::Am,
Language::Km,
Language::ZhCn,
Language::ZhTw,
Language::ZhHk,
Language::Ja,
Language::Ko,
];
pub const COUNTRIES: [Country; 109] = [
Country::Dz,
Country::Ar,
Country::Au,
Country::At,
Country::Az,
Country::Bh,
Country::Bd,
Country::By,
Country::Be,
Country::Bo,
Country::Ba,
Country::Br,
Country::Bg,
Country::Kh,
Country::Ca,
Country::Cl,
Country::Co,
Country::Cr,
Country::Hr,
Country::Cy,
Country::Cz,
Country::Dk,
Country::Do,
Country::Ec,
Country::Eg,
Country::Sv,
Country::Ee,
Country::Fi,
Country::Fr,
Country::Ge,
Country::De,
Country::Gh,
Country::Gr,
Country::Gt,
Country::Hn,
Country::Hk,
Country::Hu,
Country::Is,
Country::In,
Country::Id,
Country::Iq,
Country::Ie,
Country::Il,
Country::It,
Country::Jm,
Country::Jp,
Country::Jo,
Country::Kz,
Country::Ke,
Country::Kw,
Country::La,
Country::Lv,
Country::Lb,
Country::Ly,
Country::Li,
Country::Lt,
Country::Lu,
Country::My,
Country::Mt,
Country::Mx,
Country::Me,
Country::Ma,
Country::Np,
Country::Nl,
Country::Nz,
Country::Ni,
Country::Ng,
Country::Mk,
Country::No,
Country::Om,
Country::Pk,
Country::Pa,
Country::Pg,
Country::Py,
Country::Pe,
Country::Ph,
Country::Pl,
Country::Pt,
Country::Pr,
Country::Qa,
Country::Ro,
Country::Ru,
Country::Sa,
Country::Sn,
Country::Rs,
Country::Sg,
Country::Sk,
Country::Si,
Country::Za,
Country::Kr,
Country::Es,
Country::Lk,
Country::Se,
Country::Ch,
Country::Tw,
Country::Tz,
Country::Th,
Country::Tn,
Country::Tr,
Country::Ug,
Country::Ua,
Country::Ae,
Country::Gb,
Country::Us,
Country::Uy,
Country::Ve,
Country::Vn,
Country::Ye,
Country::Zw,
];
impl Language {
pub fn name(&self) -> &str {
match self {
Language::Af => "Afrikaans",
Language::Am => "አማርኛ",
Language::Ar => "العربية",
Language::As => "অসমীয়া",
Language::Az => "Azərbaycan",
Language::Be => "Беларуская",
Language::Bg => "Български",
Language::Bn => "বাংলা",
Language::Bs => "Bosanski",
Language::Ca => "Català",
Language::Cs => "Čeština",
Language::Da => "Dansk",
Language::De => "Deutsch",
Language::El => "Ελληνικά",
Language::En => "English (US)",
Language::EnGb => "English (UK)",
Language::EnIn => "English (India)",
Language::Es => "Español (España)",
Language::Es419 => "Español (Latinoamérica)",
Language::EsUs => "Español (US)",
Language::Et => "Eesti",
Language::Eu => "Euskara",
Language::Fa => "فارسی",
Language::Fi => "Suomi",
Language::Fil => "Filipino",
Language::Fr => "Français",
Language::FrCa => "Français (Canada)",
Language::Gl => "Galego",
Language::Gu => "ગુજરાતી",
Language::Hi => "हिन्दी",
Language::Hr => "Hrvatski",
Language::Hu => "Magyar",
Language::Hy => "Հայերեն",
Language::Id => "Bahasa Indonesia",
Language::Is => "Íslenska",
Language::It => "Italiano",
Language::Iw => "עברית",
Language::Ja => "日本語",
Language::Ka => "ქართული",
Language::Kk => "Қазақ Тілі",
Language::Km => "ខ្មែរ",
Language::Kn => "ಕನ್ನಡ",
Language::Ko => "한국어",
Language::Ky => "Кыргызча",
Language::Lo => "ລາວ",
Language::Lt => "Lietuvių",
Language::Lv => "Latviešu valoda",
Language::Mk => "Македонски",
Language::Ml => "മലയാളം",
Language::Mn => "Монгол",
Language::Mr => "मराठी",
Language::Ms => "Bahasa Malaysia",
Language::My => "ဗမာ",
Language::Ne => "नेपाली",
Language::Nl => "Nederlands",
Language::No => "Norsk",
Language::Or => "ଓଡ଼ିଆ",
Language::Pa => "ਪੰਜਾਬੀ",
Language::Pl => "Polski",
Language::Pt => "Português (Brasil)",
Language::PtPt => "Português",
Language::Ro => "Română",
Language::Ru => "Русский",
Language::Si => "සිංහල",
Language::Sk => "Slovenčina",
Language::Sl => "Slovenščina",
Language::Sq => "Shqip",
Language::Sr => "Српски",
Language::SrLatn => "Srpski",
Language::Sv => "Svenska",
Language::Sw => "Kiswahili",
Language::Ta => "தமிழ்",
Language::Te => "తెలుగు",
Language::Th => "ภาษาไทย",
Language::Tr => "Türkçe",
Language::Uk => "Українська",
Language::Ur => "اردو",
Language::Uz => "O‘zbek",
Language::Vi => "Tiếng Việt",
Language::ZhCn => "中文 (简体)",
Language::ZhHk => "中文 (香港)",
Language::ZhTw => "中文 (繁體)",
Language::Zu => "IsiZulu",
}
}
}
impl Country {
pub fn name(&self) -> &str {
match self {
Country::Ae => "United Arab Emirates",
Country::Ar => "Argentina",
Country::At => "Austria",
Country::Au => "Australia",
Country::Az => "Azerbaijan",
Country::Ba => "Bosnia and Herzegovina",
Country::Bd => "Bangladesh",
Country::Be => "Belgium",
Country::Bg => "Bulgaria",
Country::Bh => "Bahrain",
Country::Bo => "Bolivia",
Country::Br => "Brazil",
Country::By => "Belarus",
Country::Ca => "Canada",
Country::Ch => "Switzerland",
Country::Cl => "Chile",
Country::Co => "Colombia",
Country::Cr => "Costa Rica",
Country::Cy => "Cyprus",
Country::Cz => "Czechia",
Country::De => "Germany",
Country::Dk => "Denmark",
Country::Do => "Dominican Republic",
Country::Dz => "Algeria",
Country::Ec => "Ecuador",
Country::Ee => "Estonia",
Country::Eg => "Egypt",
Country::Es => "Spain",
Country::Fi => "Finland",
Country::Fr => "France",
Country::Gb => "United Kingdom",
Country::Ge => "Georgia",
Country::Gh => "Ghana",
Country::Gr => "Greece",
Country::Gt => "Guatemala",
Country::Hk => "Hong Kong",
Country::Hn => "Honduras",
Country::Hr => "Croatia",
Country::Hu => "Hungary",
Country::Id => "Indonesia",
Country::Ie => "Ireland",
Country::Il => "Israel",
Country::In => "India",
Country::Iq => "Iraq",
Country::Is => "Iceland",
Country::It => "Italy",
Country::Jm => "Jamaica",
Country::Jo => "Jordan",
Country::Jp => "Japan",
Country::Ke => "Kenya",
Country::Kh => "Cambodia",
Country::Kr => "South Korea",
Country::Kw => "Kuwait",
Country::Kz => "Kazakhstan",
Country::La => "Laos",
Country::Lb => "Lebanon",
Country::Li => "Liechtenstein",
Country::Lk => "Sri Lanka",
Country::Lt => "Lithuania",
Country::Lu => "Luxembourg",
Country::Lv => "Latvia",
Country::Ly => "Libya",
Country::Ma => "Morocco",
Country::Me => "Montenegro",
Country::Mk => "North Macedonia",
Country::Mt => "Malta",
Country::Mx => "Mexico",
Country::My => "Malaysia",
Country::Ng => "Nigeria",
Country::Ni => "Nicaragua",
Country::Nl => "Netherlands",
Country::No => "Norway",
Country::Np => "Nepal",
Country::Nz => "New Zealand",
Country::Om => "Oman",
Country::Pa => "Panama",
Country::Pe => "Peru",
Country::Pg => "Papua New Guinea",
Country::Ph => "Philippines",
Country::Pk => "Pakistan",
Country::Pl => "Poland",
Country::Pr => "Puerto Rico",
Country::Pt => "Portugal",
Country::Py => "Paraguay",
Country::Qa => "Qatar",
Country::Ro => "Romania",
Country::Rs => "Serbia",
Country::Ru => "Russia",
Country::Sa => "Saudi Arabia",
Country::Se => "Sweden",
Country::Sg => "Singapore",
Country::Si => "Slovenia",
Country::Sk => "Slovakia",
Country::Sn => "Senegal",
Country::Sv => "El Salvador",
Country::Th => "Thailand",
Country::Tn => "Tunisia",
Country::Tr => "Turkey",
Country::Tw => "Taiwan",
Country::Tz => "Tanzania",
Country::Ua => "Ukraine",
Country::Ug => "Uganda",
Country::Us => "United States",
Country::Uy => "Uruguay",
Country::Ve => "Venezuela",
Country::Vn => "Vietnam",
Country::Ye => "Yemen",
Country::Za => "South Africa",
Country::Zw => "Zimbabwe",
Country::Zz => "Global",
}
}
}
impl FromStr for Language {
type Err = Error;
fn from_str(s: &str) -> Result<Self, Self::Err> {
let mut sub = s;
loop {
if let Ok(v) = serde_plain::from_str(sub) {
return Ok(v);
}
match sub.rfind('-') {
Some(pos) => {
sub = &sub[..pos];
}
None => return Err(Error::Other("could not parse language `{s}`".into())),
}
}
}
}
serde_plain::derive_display_from_serialize!(Language);
serde_plain::derive_fromstr_from_deserialize!(Country, Error);
serde_plain::derive_display_from_serialize!(Country);