#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Elbasan {
LetterA,
LetterBe,
LetterCe,
LetterChe,
LetterDe,
LetterNde,
LetterDhe,
LetterEi,
LetterE,
LetterFe,
LetterGe,
LetterGje,
LetterHe,
LetterI,
LetterJe,
LetterKe,
LetterLe,
LetterLle,
LetterMe,
LetterNe,
LetterNa,
LetterNje,
LetterO,
LetterPe,
LetterQe,
LetterRe,
LetterRre,
LetterSe,
LetterShe,
LetterTe,
LetterThe,
LetterU,
LetterVe,
LetterXe,
LetterY,
LetterZe,
LetterZhe,
LetterGhe,
LetterGhamma,
LetterKhe,
}
impl Into<char> for Elbasan {
fn into(self) -> char {
match self {
Elbasan::LetterA => '𐔀',
Elbasan::LetterBe => '𐔁',
Elbasan::LetterCe => '𐔂',
Elbasan::LetterChe => '𐔃',
Elbasan::LetterDe => '𐔄',
Elbasan::LetterNde => '𐔅',
Elbasan::LetterDhe => '𐔆',
Elbasan::LetterEi => '𐔇',
Elbasan::LetterE => '𐔈',
Elbasan::LetterFe => '𐔉',
Elbasan::LetterGe => '𐔊',
Elbasan::LetterGje => '𐔋',
Elbasan::LetterHe => '𐔌',
Elbasan::LetterI => '𐔍',
Elbasan::LetterJe => '𐔎',
Elbasan::LetterKe => '𐔏',
Elbasan::LetterLe => '𐔐',
Elbasan::LetterLle => '𐔑',
Elbasan::LetterMe => '𐔒',
Elbasan::LetterNe => '𐔓',
Elbasan::LetterNa => '𐔔',
Elbasan::LetterNje => '𐔕',
Elbasan::LetterO => '𐔖',
Elbasan::LetterPe => '𐔗',
Elbasan::LetterQe => '𐔘',
Elbasan::LetterRe => '𐔙',
Elbasan::LetterRre => '𐔚',
Elbasan::LetterSe => '𐔛',
Elbasan::LetterShe => '𐔜',
Elbasan::LetterTe => '𐔝',
Elbasan::LetterThe => '𐔞',
Elbasan::LetterU => '𐔟',
Elbasan::LetterVe => '𐔠',
Elbasan::LetterXe => '𐔡',
Elbasan::LetterY => '𐔢',
Elbasan::LetterZe => '𐔣',
Elbasan::LetterZhe => '𐔤',
Elbasan::LetterGhe => '𐔥',
Elbasan::LetterGhamma => '𐔦',
Elbasan::LetterKhe => '𐔧',
}
}
}
impl std::convert::TryFrom<char> for Elbasan {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𐔀' => Ok(Elbasan::LetterA),
'𐔁' => Ok(Elbasan::LetterBe),
'𐔂' => Ok(Elbasan::LetterCe),
'𐔃' => Ok(Elbasan::LetterChe),
'𐔄' => Ok(Elbasan::LetterDe),
'𐔅' => Ok(Elbasan::LetterNde),
'𐔆' => Ok(Elbasan::LetterDhe),
'𐔇' => Ok(Elbasan::LetterEi),
'𐔈' => Ok(Elbasan::LetterE),
'𐔉' => Ok(Elbasan::LetterFe),
'𐔊' => Ok(Elbasan::LetterGe),
'𐔋' => Ok(Elbasan::LetterGje),
'𐔌' => Ok(Elbasan::LetterHe),
'𐔍' => Ok(Elbasan::LetterI),
'𐔎' => Ok(Elbasan::LetterJe),
'𐔏' => Ok(Elbasan::LetterKe),
'𐔐' => Ok(Elbasan::LetterLe),
'𐔑' => Ok(Elbasan::LetterLle),
'𐔒' => Ok(Elbasan::LetterMe),
'𐔓' => Ok(Elbasan::LetterNe),
'𐔔' => Ok(Elbasan::LetterNa),
'𐔕' => Ok(Elbasan::LetterNje),
'𐔖' => Ok(Elbasan::LetterO),
'𐔗' => Ok(Elbasan::LetterPe),
'𐔘' => Ok(Elbasan::LetterQe),
'𐔙' => Ok(Elbasan::LetterRe),
'𐔚' => Ok(Elbasan::LetterRre),
'𐔛' => Ok(Elbasan::LetterSe),
'𐔜' => Ok(Elbasan::LetterShe),
'𐔝' => Ok(Elbasan::LetterTe),
'𐔞' => Ok(Elbasan::LetterThe),
'𐔟' => Ok(Elbasan::LetterU),
'𐔠' => Ok(Elbasan::LetterVe),
'𐔡' => Ok(Elbasan::LetterXe),
'𐔢' => Ok(Elbasan::LetterY),
'𐔣' => Ok(Elbasan::LetterZe),
'𐔤' => Ok(Elbasan::LetterZhe),
'𐔥' => Ok(Elbasan::LetterGhe),
'𐔦' => Ok(Elbasan::LetterGhamma),
'𐔧' => Ok(Elbasan::LetterKhe),
_ => Err(()),
}
}
}
impl Into<u32> for Elbasan {
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 Elbasan {
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 Elbasan {
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 Elbasan {
pub fn new() -> Self {
Elbasan::LetterA
}
pub fn name(&self) -> String {
let s = std::format!("Elbasan{:#?}", self);
string_morph::to_sentence_case(&s)
}
}