#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum CyrillicExtendedA {
CombiningCyrillicLetterBe,
CombiningCyrillicLetterVe,
CombiningCyrillicLetterGhe,
CombiningCyrillicLetterDe,
CombiningCyrillicLetterZhe,
CombiningCyrillicLetterZe,
CombiningCyrillicLetterKa,
CombiningCyrillicLetterEl,
CombiningCyrillicLetterEm,
CombiningCyrillicLetterEn,
CombiningCyrillicLetterO,
CombiningCyrillicLetterPe,
CombiningCyrillicLetterEr,
CombiningCyrillicLetterEs,
CombiningCyrillicLetterTe,
CombiningCyrillicLetterHa,
CombiningCyrillicLetterTse,
CombiningCyrillicLetterChe,
CombiningCyrillicLetterSha,
CombiningCyrillicLetterShcha,
CombiningCyrillicLetterFita,
CombiningCyrillicLetterEsDashTe,
CombiningCyrillicLetterA,
CombiningCyrillicLetterIe,
CombiningCyrillicLetterDjerv,
CombiningCyrillicLetterMonographUk,
CombiningCyrillicLetterYat,
CombiningCyrillicLetterYu,
CombiningCyrillicLetterIotifiedA,
CombiningCyrillicLetterLittleYus,
CombiningCyrillicLetterBigYus,
}
impl Into<char> for CyrillicExtendedA {
fn into(self) -> char {
match self {
CyrillicExtendedA::CombiningCyrillicLetterBe => 'ⷠ',
CyrillicExtendedA::CombiningCyrillicLetterVe => 'ⷡ',
CyrillicExtendedA::CombiningCyrillicLetterGhe => 'ⷢ',
CyrillicExtendedA::CombiningCyrillicLetterDe => 'ⷣ',
CyrillicExtendedA::CombiningCyrillicLetterZhe => 'ⷤ',
CyrillicExtendedA::CombiningCyrillicLetterZe => 'ⷥ',
CyrillicExtendedA::CombiningCyrillicLetterKa => 'ⷦ',
CyrillicExtendedA::CombiningCyrillicLetterEl => 'ⷧ',
CyrillicExtendedA::CombiningCyrillicLetterEm => 'ⷨ',
CyrillicExtendedA::CombiningCyrillicLetterEn => 'ⷩ',
CyrillicExtendedA::CombiningCyrillicLetterO => 'ⷪ',
CyrillicExtendedA::CombiningCyrillicLetterPe => 'ⷫ',
CyrillicExtendedA::CombiningCyrillicLetterEr => 'ⷬ',
CyrillicExtendedA::CombiningCyrillicLetterEs => 'ⷭ',
CyrillicExtendedA::CombiningCyrillicLetterTe => 'ⷮ',
CyrillicExtendedA::CombiningCyrillicLetterHa => 'ⷯ',
CyrillicExtendedA::CombiningCyrillicLetterTse => 'ⷰ',
CyrillicExtendedA::CombiningCyrillicLetterChe => 'ⷱ',
CyrillicExtendedA::CombiningCyrillicLetterSha => 'ⷲ',
CyrillicExtendedA::CombiningCyrillicLetterShcha => 'ⷳ',
CyrillicExtendedA::CombiningCyrillicLetterFita => 'ⷴ',
CyrillicExtendedA::CombiningCyrillicLetterEsDashTe => 'ⷵ',
CyrillicExtendedA::CombiningCyrillicLetterA => 'ⷶ',
CyrillicExtendedA::CombiningCyrillicLetterIe => 'ⷷ',
CyrillicExtendedA::CombiningCyrillicLetterDjerv => 'ⷸ',
CyrillicExtendedA::CombiningCyrillicLetterMonographUk => 'ⷹ',
CyrillicExtendedA::CombiningCyrillicLetterYat => 'ⷺ',
CyrillicExtendedA::CombiningCyrillicLetterYu => 'ⷻ',
CyrillicExtendedA::CombiningCyrillicLetterIotifiedA => 'ⷼ',
CyrillicExtendedA::CombiningCyrillicLetterLittleYus => 'ⷽ',
CyrillicExtendedA::CombiningCyrillicLetterBigYus => 'ⷾ',
}
}
}
impl std::convert::TryFrom<char> for CyrillicExtendedA {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'ⷠ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterBe),
'ⷡ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterVe),
'ⷢ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterGhe),
'ⷣ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterDe),
'ⷤ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterZhe),
'ⷥ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterZe),
'ⷦ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterKa),
'ⷧ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterEl),
'ⷨ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterEm),
'ⷩ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterEn),
'ⷪ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterO),
'ⷫ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterPe),
'ⷬ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterEr),
'ⷭ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterEs),
'ⷮ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterTe),
'ⷯ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterHa),
'ⷰ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterTse),
'ⷱ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterChe),
'ⷲ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterSha),
'ⷳ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterShcha),
'ⷴ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterFita),
'ⷵ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterEsDashTe),
'ⷶ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterA),
'ⷷ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterIe),
'ⷸ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterDjerv),
'ⷹ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterMonographUk),
'ⷺ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterYat),
'ⷻ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterYu),
'ⷼ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterIotifiedA),
'ⷽ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterLittleYus),
'ⷾ' => Ok(CyrillicExtendedA::CombiningCyrillicLetterBigYus),
_ => Err(()),
}
}
}
impl Into<u32> for CyrillicExtendedA {
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 CyrillicExtendedA {
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 CyrillicExtendedA {
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 CyrillicExtendedA {
pub fn new() -> Self {
CyrillicExtendedA::CombiningCyrillicLetterBe
}
pub fn name(&self) -> String {
let s = std::format!("CyrillicExtendedA{:#?}", self);
string_morph::to_sentence_case(&s)
}
}