#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Georgian {
CapitalLetterAn,
CapitalLetterBan,
CapitalLetterGan,
CapitalLetterDon,
CapitalLetterEn,
CapitalLetterVin,
CapitalLetterZen,
CapitalLetterTan,
CapitalLetterIn,
CapitalLetterKan,
CapitalLetterLas,
CapitalLetterMan,
CapitalLetterNar,
CapitalLetterOn,
CapitalLetterPar,
CapitalLetterZhar,
CapitalLetterRae,
CapitalLetterSan,
CapitalLetterTar,
CapitalLetterUn,
CapitalLetterPhar,
CapitalLetterKhar,
CapitalLetterGhan,
CapitalLetterQar,
CapitalLetterShin,
CapitalLetterChin,
CapitalLetterCan,
CapitalLetterJil,
CapitalLetterCil,
CapitalLetterChar,
CapitalLetterXan,
CapitalLetterJhan,
CapitalLetterHae,
CapitalLetterHe,
CapitalLetterHie,
CapitalLetterWe,
CapitalLetterHar,
CapitalLetterHoe,
CapitalLetterYn,
CapitalLetterAen,
LetterAn,
LetterBan,
LetterGan,
LetterDon,
LetterEn,
LetterVin,
LetterZen,
LetterTan,
LetterIn,
LetterKan,
LetterLas,
LetterMan,
LetterNar,
LetterOn,
LetterPar,
LetterZhar,
LetterRae,
LetterSan,
LetterTar,
LetterUn,
LetterPhar,
LetterKhar,
LetterGhan,
LetterQar,
LetterShin,
LetterChin,
LetterCan,
LetterJil,
LetterCil,
LetterChar,
LetterXan,
LetterJhan,
LetterHae,
LetterHe,
LetterHie,
LetterWe,
LetterHar,
LetterHoe,
LetterFi,
LetterYn,
LetterElifi,
LetterTurnedGan,
LetterAin,
ParagraphSeparator,
ModifierLetterNar,
LetterAen,
LetterHardSign,
}
impl Into<char> for Georgian {
fn into(self) -> char {
match self {
Georgian::CapitalLetterAn => 'Ⴀ',
Georgian::CapitalLetterBan => 'Ⴁ',
Georgian::CapitalLetterGan => 'Ⴂ',
Georgian::CapitalLetterDon => 'Ⴃ',
Georgian::CapitalLetterEn => 'Ⴄ',
Georgian::CapitalLetterVin => 'Ⴅ',
Georgian::CapitalLetterZen => 'Ⴆ',
Georgian::CapitalLetterTan => 'Ⴇ',
Georgian::CapitalLetterIn => 'Ⴈ',
Georgian::CapitalLetterKan => 'Ⴉ',
Georgian::CapitalLetterLas => 'Ⴊ',
Georgian::CapitalLetterMan => 'Ⴋ',
Georgian::CapitalLetterNar => 'Ⴌ',
Georgian::CapitalLetterOn => 'Ⴍ',
Georgian::CapitalLetterPar => 'Ⴎ',
Georgian::CapitalLetterZhar => 'Ⴏ',
Georgian::CapitalLetterRae => 'Ⴐ',
Georgian::CapitalLetterSan => 'Ⴑ',
Georgian::CapitalLetterTar => 'Ⴒ',
Georgian::CapitalLetterUn => 'Ⴓ',
Georgian::CapitalLetterPhar => 'Ⴔ',
Georgian::CapitalLetterKhar => 'Ⴕ',
Georgian::CapitalLetterGhan => 'Ⴖ',
Georgian::CapitalLetterQar => 'Ⴗ',
Georgian::CapitalLetterShin => 'Ⴘ',
Georgian::CapitalLetterChin => 'Ⴙ',
Georgian::CapitalLetterCan => 'Ⴚ',
Georgian::CapitalLetterJil => 'Ⴛ',
Georgian::CapitalLetterCil => 'Ⴜ',
Georgian::CapitalLetterChar => 'Ⴝ',
Georgian::CapitalLetterXan => 'Ⴞ',
Georgian::CapitalLetterJhan => 'Ⴟ',
Georgian::CapitalLetterHae => 'Ⴠ',
Georgian::CapitalLetterHe => 'Ⴡ',
Georgian::CapitalLetterHie => 'Ⴢ',
Georgian::CapitalLetterWe => 'Ⴣ',
Georgian::CapitalLetterHar => 'Ⴤ',
Georgian::CapitalLetterHoe => 'Ⴥ',
Georgian::CapitalLetterYn => 'Ⴧ',
Georgian::CapitalLetterAen => 'Ⴭ',
Georgian::LetterAn => 'ა',
Georgian::LetterBan => 'ბ',
Georgian::LetterGan => 'გ',
Georgian::LetterDon => 'დ',
Georgian::LetterEn => 'ე',
Georgian::LetterVin => 'ვ',
Georgian::LetterZen => 'ზ',
Georgian::LetterTan => 'თ',
Georgian::LetterIn => 'ი',
Georgian::LetterKan => 'კ',
Georgian::LetterLas => 'ლ',
Georgian::LetterMan => 'მ',
Georgian::LetterNar => 'ნ',
Georgian::LetterOn => 'ო',
Georgian::LetterPar => 'პ',
Georgian::LetterZhar => 'ჟ',
Georgian::LetterRae => 'რ',
Georgian::LetterSan => 'ს',
Georgian::LetterTar => 'ტ',
Georgian::LetterUn => 'უ',
Georgian::LetterPhar => 'ფ',
Georgian::LetterKhar => 'ქ',
Georgian::LetterGhan => 'ღ',
Georgian::LetterQar => 'ყ',
Georgian::LetterShin => 'შ',
Georgian::LetterChin => 'ჩ',
Georgian::LetterCan => 'ც',
Georgian::LetterJil => 'ძ',
Georgian::LetterCil => 'წ',
Georgian::LetterChar => 'ჭ',
Georgian::LetterXan => 'ხ',
Georgian::LetterJhan => 'ჯ',
Georgian::LetterHae => 'ჰ',
Georgian::LetterHe => 'ჱ',
Georgian::LetterHie => 'ჲ',
Georgian::LetterWe => 'ჳ',
Georgian::LetterHar => 'ჴ',
Georgian::LetterHoe => 'ჵ',
Georgian::LetterFi => 'ჶ',
Georgian::LetterYn => 'ჷ',
Georgian::LetterElifi => 'ჸ',
Georgian::LetterTurnedGan => 'ჹ',
Georgian::LetterAin => 'ჺ',
Georgian::ParagraphSeparator => '჻',
Georgian::ModifierLetterNar => 'ჼ',
Georgian::LetterAen => 'ჽ',
Georgian::LetterHardSign => 'ჾ',
}
}
}
impl std::convert::TryFrom<char> for Georgian {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'Ⴀ' => Ok(Georgian::CapitalLetterAn),
'Ⴁ' => Ok(Georgian::CapitalLetterBan),
'Ⴂ' => Ok(Georgian::CapitalLetterGan),
'Ⴃ' => Ok(Georgian::CapitalLetterDon),
'Ⴄ' => Ok(Georgian::CapitalLetterEn),
'Ⴅ' => Ok(Georgian::CapitalLetterVin),
'Ⴆ' => Ok(Georgian::CapitalLetterZen),
'Ⴇ' => Ok(Georgian::CapitalLetterTan),
'Ⴈ' => Ok(Georgian::CapitalLetterIn),
'Ⴉ' => Ok(Georgian::CapitalLetterKan),
'Ⴊ' => Ok(Georgian::CapitalLetterLas),
'Ⴋ' => Ok(Georgian::CapitalLetterMan),
'Ⴌ' => Ok(Georgian::CapitalLetterNar),
'Ⴍ' => Ok(Georgian::CapitalLetterOn),
'Ⴎ' => Ok(Georgian::CapitalLetterPar),
'Ⴏ' => Ok(Georgian::CapitalLetterZhar),
'Ⴐ' => Ok(Georgian::CapitalLetterRae),
'Ⴑ' => Ok(Georgian::CapitalLetterSan),
'Ⴒ' => Ok(Georgian::CapitalLetterTar),
'Ⴓ' => Ok(Georgian::CapitalLetterUn),
'Ⴔ' => Ok(Georgian::CapitalLetterPhar),
'Ⴕ' => Ok(Georgian::CapitalLetterKhar),
'Ⴖ' => Ok(Georgian::CapitalLetterGhan),
'Ⴗ' => Ok(Georgian::CapitalLetterQar),
'Ⴘ' => Ok(Georgian::CapitalLetterShin),
'Ⴙ' => Ok(Georgian::CapitalLetterChin),
'Ⴚ' => Ok(Georgian::CapitalLetterCan),
'Ⴛ' => Ok(Georgian::CapitalLetterJil),
'Ⴜ' => Ok(Georgian::CapitalLetterCil),
'Ⴝ' => Ok(Georgian::CapitalLetterChar),
'Ⴞ' => Ok(Georgian::CapitalLetterXan),
'Ⴟ' => Ok(Georgian::CapitalLetterJhan),
'Ⴠ' => Ok(Georgian::CapitalLetterHae),
'Ⴡ' => Ok(Georgian::CapitalLetterHe),
'Ⴢ' => Ok(Georgian::CapitalLetterHie),
'Ⴣ' => Ok(Georgian::CapitalLetterWe),
'Ⴤ' => Ok(Georgian::CapitalLetterHar),
'Ⴥ' => Ok(Georgian::CapitalLetterHoe),
'Ⴧ' => Ok(Georgian::CapitalLetterYn),
'Ⴭ' => Ok(Georgian::CapitalLetterAen),
'ა' => Ok(Georgian::LetterAn),
'ბ' => Ok(Georgian::LetterBan),
'გ' => Ok(Georgian::LetterGan),
'დ' => Ok(Georgian::LetterDon),
'ე' => Ok(Georgian::LetterEn),
'ვ' => Ok(Georgian::LetterVin),
'ზ' => Ok(Georgian::LetterZen),
'თ' => Ok(Georgian::LetterTan),
'ი' => Ok(Georgian::LetterIn),
'კ' => Ok(Georgian::LetterKan),
'ლ' => Ok(Georgian::LetterLas),
'მ' => Ok(Georgian::LetterMan),
'ნ' => Ok(Georgian::LetterNar),
'ო' => Ok(Georgian::LetterOn),
'პ' => Ok(Georgian::LetterPar),
'ჟ' => Ok(Georgian::LetterZhar),
'რ' => Ok(Georgian::LetterRae),
'ს' => Ok(Georgian::LetterSan),
'ტ' => Ok(Georgian::LetterTar),
'უ' => Ok(Georgian::LetterUn),
'ფ' => Ok(Georgian::LetterPhar),
'ქ' => Ok(Georgian::LetterKhar),
'ღ' => Ok(Georgian::LetterGhan),
'ყ' => Ok(Georgian::LetterQar),
'შ' => Ok(Georgian::LetterShin),
'ჩ' => Ok(Georgian::LetterChin),
'ც' => Ok(Georgian::LetterCan),
'ძ' => Ok(Georgian::LetterJil),
'წ' => Ok(Georgian::LetterCil),
'ჭ' => Ok(Georgian::LetterChar),
'ხ' => Ok(Georgian::LetterXan),
'ჯ' => Ok(Georgian::LetterJhan),
'ჰ' => Ok(Georgian::LetterHae),
'ჱ' => Ok(Georgian::LetterHe),
'ჲ' => Ok(Georgian::LetterHie),
'ჳ' => Ok(Georgian::LetterWe),
'ჴ' => Ok(Georgian::LetterHar),
'ჵ' => Ok(Georgian::LetterHoe),
'ჶ' => Ok(Georgian::LetterFi),
'ჷ' => Ok(Georgian::LetterYn),
'ჸ' => Ok(Georgian::LetterElifi),
'ჹ' => Ok(Georgian::LetterTurnedGan),
'ჺ' => Ok(Georgian::LetterAin),
'჻' => Ok(Georgian::ParagraphSeparator),
'ჼ' => Ok(Georgian::ModifierLetterNar),
'ჽ' => Ok(Georgian::LetterAen),
'ჾ' => Ok(Georgian::LetterHardSign),
_ => Err(()),
}
}
}
impl Into<u32> for Georgian {
fn into(self) -> u32 {
let c: char = self.into();
let hex = c
.escape_unicode()
.to_string()
.replace("\\u{", "")
.replace("}", "");
u32::from_str_radix(&hex, 16).unwrap()
}
}
impl std::convert::TryFrom<u32> for Georgian {
type Error = ();
fn try_from(u: u32) -> Result<Self, Self::Error> {
if let Ok(c) = char::try_from(u) {
Self::try_from(c)
} else {
Err(())
}
}
}
impl Iterator for Georgian {
type Item = Self;
fn next(&mut self) -> Option<Self> {
let index: u32 = (*self).into();
use std::convert::TryFrom;
Self::try_from(index + 1).ok()
}
}
impl Georgian {
pub fn new() -> Self {
Georgian::CapitalLetterAn
}
pub fn name(&self) -> String {
let s = std::format!("Georgian{:#?}", self);
string_morph::to_sentence_case(&s)
}
}