use std::fmt::{Debug, Display, Formatter, Result};
use serde::{Deserialize, Serialize};
use strum_macros::{EnumIter, EnumString};
#[derive(
Clone,
Copy,
Debug,
Serialize,
Deserialize,
EnumIter,
EnumString,
Eq,
PartialEq,
Hash,
Ord,
PartialOrd,
)]
#[allow(clippy::upper_case_acronyms)]
#[strum(ascii_case_insensitive)]
#[cfg_attr(
feature = "python",
pyo3::prelude::pyclass(eq, eq_int, frozen, hash, ord, module = "lingua")
)]
pub enum IsoCode639_1 {
#[cfg(feature = "afrikaans")]
AF,
#[cfg(feature = "arabic")]
AR,
#[cfg(feature = "azerbaijani")]
AZ,
#[cfg(feature = "belarusian")]
BE,
#[cfg(feature = "bulgarian")]
BG,
#[cfg(feature = "bengali")]
BN,
#[cfg(feature = "bosnian")]
BS,
#[cfg(feature = "catalan")]
CA,
#[cfg(feature = "czech")]
CS,
#[cfg(feature = "welsh")]
CY,
#[cfg(feature = "danish")]
DA,
#[cfg(feature = "german")]
DE,
#[cfg(feature = "greek")]
EL,
#[cfg(feature = "english")]
EN,
#[cfg(feature = "esperanto")]
EO,
#[cfg(feature = "spanish")]
ES,
#[cfg(feature = "estonian")]
ET,
#[cfg(feature = "basque")]
EU,
#[cfg(feature = "persian")]
FA,
#[cfg(feature = "finnish")]
FI,
#[cfg(feature = "french")]
FR,
#[cfg(feature = "irish")]
GA,
#[cfg(feature = "gujarati")]
GU,
#[cfg(feature = "hebrew")]
HE,
#[cfg(feature = "hindi")]
HI,
#[cfg(feature = "croatian")]
HR,
#[cfg(feature = "hungarian")]
HU,
#[cfg(feature = "armenian")]
HY,
#[cfg(feature = "indonesian")]
ID,
#[cfg(feature = "icelandic")]
IS,
#[cfg(feature = "italian")]
IT,
#[cfg(feature = "japanese")]
JA,
#[cfg(feature = "georgian")]
KA,
#[cfg(feature = "kazakh")]
KK,
#[cfg(feature = "korean")]
KO,
#[cfg(feature = "latin")]
LA,
#[cfg(feature = "ganda")]
LG,
#[cfg(feature = "lithuanian")]
LT,
#[cfg(feature = "latvian")]
LV,
#[cfg(feature = "maori")]
MI,
#[cfg(feature = "macedonian")]
MK,
#[cfg(feature = "mongolian")]
MN,
#[cfg(feature = "marathi")]
MR,
#[cfg(feature = "malay")]
MS,
#[cfg(feature = "bokmal")]
NB,
#[cfg(feature = "dutch")]
NL,
#[cfg(feature = "nynorsk")]
NN,
#[cfg(feature = "punjabi")]
PA,
#[cfg(feature = "polish")]
PL,
#[cfg(feature = "portuguese")]
PT,
#[cfg(feature = "romanian")]
RO,
#[cfg(feature = "russian")]
RU,
#[cfg(feature = "slovak")]
SK,
#[cfg(feature = "slovene")]
SL,
#[cfg(feature = "shona")]
SN,
#[cfg(feature = "somali")]
SO,
#[cfg(feature = "albanian")]
SQ,
#[cfg(feature = "serbian")]
SR,
#[cfg(feature = "sotho")]
ST,
#[cfg(feature = "swedish")]
SV,
#[cfg(feature = "swahili")]
SW,
#[cfg(feature = "tamil")]
TA,
#[cfg(feature = "telugu")]
TE,
#[cfg(feature = "thai")]
TH,
#[cfg(feature = "tagalog")]
TL,
#[cfg(feature = "tswana")]
TN,
#[cfg(feature = "turkish")]
TR,
#[cfg(feature = "tsonga")]
TS,
#[cfg(feature = "ukrainian")]
UK,
#[cfg(feature = "urdu")]
UR,
#[cfg(feature = "vietnamese")]
VI,
#[cfg(feature = "xhosa")]
XH,
#[cfg(feature = "yoruba")]
YO,
#[cfg(feature = "chinese")]
ZH,
#[cfg(feature = "zulu")]
ZU,
}
#[derive(
Clone,
Copy,
Debug,
Serialize,
Deserialize,
EnumIter,
EnumString,
Eq,
PartialEq,
Hash,
Ord,
PartialOrd,
)]
#[allow(clippy::upper_case_acronyms)]
#[strum(ascii_case_insensitive)]
#[cfg_attr(
feature = "python",
pyo3::prelude::pyclass(eq, eq_int, frozen, hash, ord, module = "lingua")
)]
pub enum IsoCode639_3 {
#[cfg(feature = "afrikaans")]
AFR,
#[cfg(feature = "arabic")]
ARA,
#[cfg(feature = "azerbaijani")]
AZE,
#[cfg(feature = "belarusian")]
BEL,
#[cfg(feature = "bengali")]
BEN,
#[cfg(feature = "bosnian")]
BOS,
#[cfg(feature = "bulgarian")]
BUL,
#[cfg(feature = "catalan")]
CAT,
#[cfg(feature = "czech")]
CES,
#[cfg(feature = "welsh")]
CYM,
#[cfg(feature = "danish")]
DAN,
#[cfg(feature = "german")]
DEU,
#[cfg(feature = "greek")]
ELL,
#[cfg(feature = "english")]
ENG,
#[cfg(feature = "esperanto")]
EPO,
#[cfg(feature = "estonian")]
EST,
#[cfg(feature = "basque")]
EUS,
#[cfg(feature = "persian")]
FAS,
#[cfg(feature = "finnish")]
FIN,
#[cfg(feature = "french")]
FRA,
#[cfg(feature = "irish")]
GLE,
#[cfg(feature = "gujarati")]
GUJ,
#[cfg(feature = "hebrew")]
HEB,
#[cfg(feature = "hindi")]
HIN,
#[cfg(feature = "croatian")]
HRV,
#[cfg(feature = "hungarian")]
HUN,
#[cfg(feature = "armenian")]
HYE,
#[cfg(feature = "indonesian")]
IND,
#[cfg(feature = "icelandic")]
ISL,
#[cfg(feature = "italian")]
ITA,
#[cfg(feature = "japanese")]
JPN,
#[cfg(feature = "georgian")]
KAT,
#[cfg(feature = "kazakh")]
KAZ,
#[cfg(feature = "korean")]
KOR,
#[cfg(feature = "latin")]
LAT,
#[cfg(feature = "latvian")]
LAV,
#[cfg(feature = "lithuanian")]
LIT,
#[cfg(feature = "ganda")]
LUG,
#[cfg(feature = "marathi")]
MAR,
#[cfg(feature = "macedonian")]
MKD,
#[cfg(feature = "mongolian")]
MON,
#[cfg(feature = "maori")]
MRI,
#[cfg(feature = "malay")]
MSA,
#[cfg(feature = "dutch")]
NLD,
#[cfg(feature = "nynorsk")]
NNO,
#[cfg(feature = "bokmal")]
NOB,
#[cfg(feature = "punjabi")]
PAN,
#[cfg(feature = "polish")]
POL,
#[cfg(feature = "portuguese")]
POR,
#[cfg(feature = "romanian")]
RON,
#[cfg(feature = "russian")]
RUS,
#[cfg(feature = "slovak")]
SLK,
#[cfg(feature = "slovene")]
SLV,
#[cfg(feature = "shona")]
SNA,
#[cfg(feature = "somali")]
SOM,
#[cfg(feature = "sotho")]
SOT,
#[cfg(feature = "spanish")]
SPA,
#[cfg(feature = "albanian")]
SQI,
#[cfg(feature = "serbian")]
SRP,
#[cfg(feature = "swahili")]
SWA,
#[cfg(feature = "swedish")]
SWE,
#[cfg(feature = "tamil")]
TAM,
#[cfg(feature = "telugu")]
TEL,
#[cfg(feature = "tagalog")]
TGL,
#[cfg(feature = "thai")]
THA,
#[cfg(feature = "tswana")]
TSN,
#[cfg(feature = "tsonga")]
TSO,
#[cfg(feature = "turkish")]
TUR,
#[cfg(feature = "ukrainian")]
UKR,
#[cfg(feature = "urdu")]
URD,
#[cfg(feature = "vietnamese")]
VIE,
#[cfg(feature = "xhosa")]
XHO,
#[cfg(feature = "yoruba")]
YOR,
#[cfg(feature = "chinese")]
ZHO,
#[cfg(feature = "zulu")]
ZUL,
}
impl Display for IsoCode639_1 {
fn fmt(&self, f: &mut Formatter<'_>) -> Result {
let debug_repr = format!("{self:?}");
write!(f, "{}", debug_repr.to_lowercase())
}
}
impl Display for IsoCode639_3 {
fn fmt(&self, f: &mut Formatter<'_>) -> Result {
let debug_repr = format!("{self:?}");
write!(f, "{}", debug_repr.to_lowercase())
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::str::FromStr;
use strum::ParseError::VariantNotFound;
#[test]
fn assert_iso_code_639_1_string_representation_is_correct() {
assert_eq!(IsoCode639_1::EN.to_string(), "en");
}
#[test]
fn assert_iso_code_639_3_string_representation_is_correct() {
assert_eq!(IsoCode639_3::ENG.to_string(), "eng");
}
#[test]
fn assert_string_to_iso_code_639_1_is_correct() {
assert_eq!(IsoCode639_1::from_str("en"), Ok(IsoCode639_1::EN));
assert_eq!(IsoCode639_1::from_str("12"), Err(VariantNotFound));
}
#[test]
fn assert_string_to_iso_code_639_3_is_correct() {
assert_eq!(IsoCode639_3::from_str("eng"), Ok(IsoCode639_3::ENG));
assert_eq!(IsoCode639_3::from_str("123"), Err(VariantNotFound));
}
}