#[allow(non_camel_case_types)]
#[derive(Debug, Clone)]
pub enum Locale {
af_ZA,
am_ET,
ar_AE,
ar_BH,
ar_DZ,
ar_EG,
ar_IQ,
ar_JO,
ar_KW,
ar_LB,
ar_LY,
ar_MA,
ar_OM,
ar_QA,
ar_SA,
ar_SY,
ar_TN,
ar_YE,
az_AZ,
bg_BG,
bn_BD,
bn_IN,
bs_BA,
ca_ES,
cs_CZ,
cy_GB,
da_DK,
de_AT,
de_CH,
de_DE,
el_GR,
en_AU,
en_CA,
en_GB,
en_HK,
en_IE,
en_IN,
en_KE,
en_NG,
en_NZ,
en_PH,
en_SG,
en_TZ,
en_US,
en_ZA,
es_AR,
es_BO,
es_CL,
es_CO,
es_CR,
es_CU,
es_DO,
es_EC,
es_ES,
es_GQ,
es_GT,
es_HN,
es_MX,
es_NI,
es_PA,
es_PE,
es_PR,
es_PY,
es_SV,
es_US,
es_UY,
es_VE,
et_EE,
eu_ES,
fa_IR,
fi_FI,
fil_PH,
fr_BE,
fr_CA,
fr_CH,
fr_FR,
ga_IE,
gl_ES,
gu_IN,
he_IL,
hi_IN,
hr_HR,
hu_HU,
hy_AM,
id_ID,
is_IS,
it_IT,
ja_JP,
jv_ID,
ka_GE,
kk_KZ,
km_KH,
kn_IN,
ko_KR,
lo_LA,
lt_LT,
lv_LV,
mk_MK,
ml_IN,
mn_MN,
mr_IN,
ms_MY,
mt_MT,
my_MM,
nb_NO,
ne_NP,
nl_BE,
nl_NL,
pl_PL,
ps_AF,
pt_BR,
pt_PT,
ro_RO,
ru_RU,
si_LK,
sk_SK,
sl_SI,
so_SO,
sq_AL,
sr_RS,
su_ID,
sv_SE,
sw_KE,
sw_TZ,
ta_IN,
ta_LK,
ta_MY,
ta_SG,
te_IN,
th_TH,
tr_TR,
uk_UA,
ur_IN,
ur_PK,
uz_UZ,
vi_VN,
wuu_CN,
yue_CN,
zh_CN,
zh_HK,
zh_TW,
zu_ZA,
}
impl Into<String> for Locale {
fn into(self) -> String {
(match self {
Self::af_ZA => "af-ZA",
Self::am_ET => "am-ET",
Self::ar_AE => "ar-AE",
Self::ar_BH => "ar-BH",
Self::ar_DZ => "ar-DZ",
Self::ar_EG => "ar-EG",
Self::ar_IQ => "ar-IQ",
Self::ar_JO => "ar-JO",
Self::ar_KW => "ar-KW",
Self::ar_LB => "ar-LB",
Self::ar_LY => "ar-LY",
Self::ar_MA => "ar-MA",
Self::ar_OM => "ar-OM",
Self::ar_QA => "ar-QA",
Self::ar_SA => "ar-SA",
Self::ar_SY => "ar-SY",
Self::ar_TN => "ar-TN",
Self::ar_YE => "ar-YE",
Self::az_AZ => "az-AZ",
Self::bg_BG => "bg-BG",
Self::bn_BD => "bn-BD",
Self::bn_IN => "bn-IN",
Self::bs_BA => "bs-BA",
Self::ca_ES => "ca-ES",
Self::cs_CZ => "cs-CZ",
Self::cy_GB => "cy-GB",
Self::da_DK => "da-DK",
Self::de_AT => "de-AT",
Self::de_CH => "de-CH",
Self::de_DE => "de-DE",
Self::el_GR => "el-GR",
Self::en_AU => "en-AU",
Self::en_CA => "en-CA",
Self::en_GB => "en-GB",
Self::en_HK => "en-HK",
Self::en_IE => "en-IE",
Self::en_IN => "en-IN",
Self::en_KE => "en-KE",
Self::en_NG => "en-NG",
Self::en_NZ => "en-NZ",
Self::en_PH => "en-PH",
Self::en_SG => "en-SG",
Self::en_TZ => "en-TZ",
Self::en_US => "en-US",
Self::en_ZA => "en-ZA",
Self::es_AR => "es-AR",
Self::es_BO => "es-BO",
Self::es_CL => "es-CL",
Self::es_CO => "es-CO",
Self::es_CR => "es-CR",
Self::es_CU => "es-CU",
Self::es_DO => "es-DO",
Self::es_EC => "es-EC",
Self::es_ES => "es-ES",
Self::es_GQ => "es-GQ",
Self::es_GT => "es-GT",
Self::es_HN => "es-HN",
Self::es_MX => "es-MX",
Self::es_NI => "es-NI",
Self::es_PA => "es-PA",
Self::es_PE => "es-PE",
Self::es_PR => "es-PR",
Self::es_PY => "es-PY",
Self::es_SV => "es-SV",
Self::es_US => "es-US",
Self::es_UY => "es-UY",
Self::es_VE => "es-VE",
Self::et_EE => "et-EE",
Self::eu_ES => "eu-ES",
Self::fa_IR => "fa-IR",
Self::fi_FI => "fi-FI",
Self::fil_PH => "fil-PH",
Self::fr_BE => "fr-BE",
Self::fr_CA => "fr-CA",
Self::fr_CH => "fr-CH",
Self::fr_FR => "fr-FR",
Self::ga_IE => "ga-IE",
Self::gl_ES => "gl-ES",
Self::gu_IN => "gu-IN",
Self::he_IL => "he-IL",
Self::hi_IN => "hi-IN",
Self::hr_HR => "hr-HR",
Self::hu_HU => "hu-HU",
Self::hy_AM => "hy-AM",
Self::id_ID => "id-ID",
Self::is_IS => "is-IS",
Self::it_IT => "it-IT",
Self::ja_JP => "ja-JP",
Self::jv_ID => "jv-ID",
Self::ka_GE => "ka-GE",
Self::kk_KZ => "kk-KZ",
Self::km_KH => "km-KH",
Self::kn_IN => "kn-IN",
Self::ko_KR => "ko-KR",
Self::lo_LA => "lo-LA",
Self::lt_LT => "lt-LT",
Self::lv_LV => "lv-LV",
Self::mk_MK => "mk-MK",
Self::ml_IN => "ml-IN",
Self::mn_MN => "mn-MN",
Self::mr_IN => "mr-IN",
Self::ms_MY => "ms-MY",
Self::mt_MT => "mt-MT",
Self::my_MM => "my-MM",
Self::nb_NO => "nb-NO",
Self::ne_NP => "ne-NP",
Self::nl_BE => "nl-BE",
Self::nl_NL => "nl-NL",
Self::pl_PL => "pl-PL",
Self::ps_AF => "ps-AF",
Self::pt_BR => "pt-BR",
Self::pt_PT => "pt-PT",
Self::ro_RO => "ro-RO",
Self::ru_RU => "ru-RU",
Self::si_LK => "si-LK",
Self::sk_SK => "sk-SK",
Self::sl_SI => "sl-SI",
Self::so_SO => "so-SO",
Self::sq_AL => "sq-AL",
Self::sr_RS => "sr-RS",
Self::su_ID => "su-ID",
Self::sv_SE => "sv-SE",
Self::sw_KE => "sw-KE",
Self::sw_TZ => "sw-TZ",
Self::ta_IN => "ta-IN",
Self::ta_LK => "ta-LK",
Self::ta_MY => "ta-MY",
Self::ta_SG => "ta-SG",
Self::te_IN => "te-IN",
Self::th_TH => "th-TH",
Self::tr_TR => "tr-TR",
Self::uk_UA => "uk-UA",
Self::ur_IN => "ur-IN",
Self::ur_PK => "ur-PK",
Self::uz_UZ => "uz-UZ",
Self::vi_VN => "vi-VN",
Self::wuu_CN => "wuu-CN",
Self::yue_CN => "yue-CN",
Self::zh_CN => "zh-CN",
Self::zh_HK => "zh-HK",
Self::zh_TW => "zh-TW",
Self::zu_ZA => "zu-ZA",
})
.into()
}
}
impl From<&str> for Locale {
fn from(value: &str) -> Self {
match value {
"af-ZA" => Self::af_ZA,
"am-ET" => Self::am_ET,
"ar-AE" => Self::ar_AE,
"ar-BH" => Self::ar_BH,
"ar-DZ" => Self::ar_DZ,
"ar-EG" => Self::ar_EG,
"ar-IQ" => Self::ar_IQ,
"ar-JO" => Self::ar_JO,
"ar-KW" => Self::ar_KW,
"ar-LB" => Self::ar_LB,
"ar-LY" => Self::ar_LY,
"ar-MA" => Self::ar_MA,
"ar-OM" => Self::ar_OM,
"ar-QA" => Self::ar_QA,
"ar-SA" => Self::ar_SA,
"ar-SY" => Self::ar_SY,
"ar-TN" => Self::ar_TN,
"ar-YE" => Self::ar_YE,
"az-AZ" => Self::az_AZ,
"bg-BG" => Self::bg_BG,
"bn-BD" => Self::bn_BD,
"bn-IN" => Self::bn_IN,
"bs-BA" => Self::bs_BA,
"ca-ES" => Self::ca_ES,
"cs-CZ" => Self::cs_CZ,
"cy-GB" => Self::cy_GB,
"da-DK" => Self::da_DK,
"de-AT" => Self::de_AT,
"de-CH" => Self::de_CH,
"de-DE" => Self::de_DE,
"el-GR" => Self::el_GR,
"en-AU" => Self::en_AU,
"en-CA" => Self::en_CA,
"en-GB" => Self::en_GB,
"en-HK" => Self::en_HK,
"en-IE" => Self::en_IE,
"en-IN" => Self::en_IN,
"en-KE" => Self::en_KE,
"en-NG" => Self::en_NG,
"en-NZ" => Self::en_NZ,
"en-PH" => Self::en_PH,
"en-SG" => Self::en_SG,
"en-TZ" => Self::en_TZ,
"en-US" => Self::en_US,
"en-ZA" => Self::en_ZA,
"es-AR" => Self::es_AR,
"es-BO" => Self::es_BO,
"es-CL" => Self::es_CL,
"es-CO" => Self::es_CO,
"es-CR" => Self::es_CR,
"es-CU" => Self::es_CU,
"es-DO" => Self::es_DO,
"es-EC" => Self::es_EC,
"es-ES" => Self::es_ES,
"es-GQ" => Self::es_GQ,
"es-GT" => Self::es_GT,
"es-HN" => Self::es_HN,
"es-MX" => Self::es_MX,
"es-NI" => Self::es_NI,
"es-PA" => Self::es_PA,
"es-PE" => Self::es_PE,
"es-PR" => Self::es_PR,
"es-PY" => Self::es_PY,
"es-SV" => Self::es_SV,
"es-US" => Self::es_US,
"es-UY" => Self::es_UY,
"es-VE" => Self::es_VE,
"et-EE" => Self::et_EE,
"eu-ES" => Self::eu_ES,
"fa-IR" => Self::fa_IR,
"fi-FI" => Self::fi_FI,
"fil-PH" => Self::fil_PH,
"fr-BE" => Self::fr_BE,
"fr-CA" => Self::fr_CA,
"fr-CH" => Self::fr_CH,
"fr-FR" => Self::fr_FR,
"ga-IE" => Self::ga_IE,
"gl-ES" => Self::gl_ES,
"gu-IN" => Self::gu_IN,
"he-IL" => Self::he_IL,
"hi-IN" => Self::hi_IN,
"hr-HR" => Self::hr_HR,
"hu-HU" => Self::hu_HU,
"hy-AM" => Self::hy_AM,
"id-ID" => Self::id_ID,
"is-IS" => Self::is_IS,
"it-IT" => Self::it_IT,
"ja-JP" => Self::ja_JP,
"jv-ID" => Self::jv_ID,
"ka-GE" => Self::ka_GE,
"kk-KZ" => Self::kk_KZ,
"km-KH" => Self::km_KH,
"kn-IN" => Self::kn_IN,
"ko-KR" => Self::ko_KR,
"lo-LA" => Self::lo_LA,
"lt-LT" => Self::lt_LT,
"lv-LV" => Self::lv_LV,
"mk-MK" => Self::mk_MK,
"ml-IN" => Self::ml_IN,
"mn-MN" => Self::mn_MN,
"mr-IN" => Self::mr_IN,
"ms-MY" => Self::ms_MY,
"mt-MT" => Self::mt_MT,
"my-MM" => Self::my_MM,
"nb-NO" => Self::nb_NO,
"ne-NP" => Self::ne_NP,
"nl-BE" => Self::nl_BE,
"nl-NL" => Self::nl_NL,
"pl-PL" => Self::pl_PL,
"ps-AF" => Self::ps_AF,
"pt-BR" => Self::pt_BR,
"pt-PT" => Self::pt_PT,
"ro-RO" => Self::ro_RO,
"ru-RU" => Self::ru_RU,
"si-LK" => Self::si_LK,
"sk-SK" => Self::sk_SK,
"sl-SI" => Self::sl_SI,
"so-SO" => Self::so_SO,
"sq-AL" => Self::sq_AL,
"sr-RS" => Self::sr_RS,
"su-ID" => Self::su_ID,
"sv-SE" => Self::sv_SE,
"sw-KE" => Self::sw_KE,
"sw-TZ" => Self::sw_TZ,
"ta-IN" => Self::ta_IN,
"ta-LK" => Self::ta_LK,
"ta-MY" => Self::ta_MY,
"ta-SG" => Self::ta_SG,
"te-IN" => Self::te_IN,
"th-TH" => Self::th_TH,
"tr-TR" => Self::tr_TR,
"uk-UA" => Self::uk_UA,
"ur-IN" => Self::ur_IN,
"ur-PK" => Self::ur_PK,
"uz-UZ" => Self::uz_UZ,
"vi-VN" => Self::vi_VN,
"wuu-CN" => Self::wuu_CN,
"yue-CN" => Self::yue_CN,
"zh-CN" => Self::zh_CN,
"zh-HK" => Self::zh_HK,
"zh-TW" => Self::zh_TW,
"zu-ZA" => Self::zu_ZA,
_ => {
log::warn!( target: "rust-ai", "Unrecognized locale `{}`", value);
todo!("The local file should be updated and regenerated")
}
}
}
}
impl serde::Serialize for Locale {
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
let content = Into::<String>::into(self.clone());
serializer.serialize_str(&content)
}
}
struct LocaleVisitor;
impl<'de> serde::de::Visitor<'de> for LocaleVisitor {
type Value = Locale;
fn visit_string<E>(self, v: String) -> Result<Self::Value, E>
where
E: serde::de::Error,
{
Ok(Into::<Self::Value>::into(v.as_str()))
}
fn visit_str<E>(self, v: &str) -> Result<Self::Value, E>
where
E: serde::de::Error,
{
Ok(Into::<Self::Value>::into(v))
}
fn expecting(&self, formatter: &mut std::fmt::Formatter) -> std::fmt::Result {
formatter.write_str("Unrecognizable locale string.")
}
}
impl<'de> serde::Deserialize<'de> for Locale {
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
deserializer.deserialize_string(LocaleVisitor)
}
}