#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum OldItalic {
LetterA,
LetterBe,
LetterKe,
LetterDe,
LetterE,
LetterVe,
LetterZe,
LetterHe,
LetterThe,
LetterI,
LetterKa,
LetterEl,
LetterEm,
LetterEn,
LetterEsh,
LetterO,
LetterPe,
LetterShe,
LetterKu,
LetterEr,
LetterEs,
LetterTe,
LetterU,
LetterEks,
LetterPhe,
LetterKhe,
LetterEf,
LetterErs,
LetterChe,
LetterIi,
LetterUu,
LetterEss,
NumeralOne,
NumeralFive,
NumeralTen,
NumeralFifty,
LetterYe,
LetterNorthernTse,
}
impl Into<char> for OldItalic {
fn into(self) -> char {
match self {
OldItalic::LetterA => '𐌀',
OldItalic::LetterBe => '𐌁',
OldItalic::LetterKe => '𐌂',
OldItalic::LetterDe => '𐌃',
OldItalic::LetterE => '𐌄',
OldItalic::LetterVe => '𐌅',
OldItalic::LetterZe => '𐌆',
OldItalic::LetterHe => '𐌇',
OldItalic::LetterThe => '𐌈',
OldItalic::LetterI => '𐌉',
OldItalic::LetterKa => '𐌊',
OldItalic::LetterEl => '𐌋',
OldItalic::LetterEm => '𐌌',
OldItalic::LetterEn => '𐌍',
OldItalic::LetterEsh => '𐌎',
OldItalic::LetterO => '𐌏',
OldItalic::LetterPe => '𐌐',
OldItalic::LetterShe => '𐌑',
OldItalic::LetterKu => '𐌒',
OldItalic::LetterEr => '𐌓',
OldItalic::LetterEs => '𐌔',
OldItalic::LetterTe => '𐌕',
OldItalic::LetterU => '𐌖',
OldItalic::LetterEks => '𐌗',
OldItalic::LetterPhe => '𐌘',
OldItalic::LetterKhe => '𐌙',
OldItalic::LetterEf => '𐌚',
OldItalic::LetterErs => '𐌛',
OldItalic::LetterChe => '𐌜',
OldItalic::LetterIi => '𐌝',
OldItalic::LetterUu => '𐌞',
OldItalic::LetterEss => '𐌟',
OldItalic::NumeralOne => '𐌠',
OldItalic::NumeralFive => '𐌡',
OldItalic::NumeralTen => '𐌢',
OldItalic::NumeralFifty => '𐌣',
OldItalic::LetterYe => '𐌭',
OldItalic::LetterNorthernTse => '𐌮',
}
}
}
impl std::convert::TryFrom<char> for OldItalic {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𐌀' => Ok(OldItalic::LetterA),
'𐌁' => Ok(OldItalic::LetterBe),
'𐌂' => Ok(OldItalic::LetterKe),
'𐌃' => Ok(OldItalic::LetterDe),
'𐌄' => Ok(OldItalic::LetterE),
'𐌅' => Ok(OldItalic::LetterVe),
'𐌆' => Ok(OldItalic::LetterZe),
'𐌇' => Ok(OldItalic::LetterHe),
'𐌈' => Ok(OldItalic::LetterThe),
'𐌉' => Ok(OldItalic::LetterI),
'𐌊' => Ok(OldItalic::LetterKa),
'𐌋' => Ok(OldItalic::LetterEl),
'𐌌' => Ok(OldItalic::LetterEm),
'𐌍' => Ok(OldItalic::LetterEn),
'𐌎' => Ok(OldItalic::LetterEsh),
'𐌏' => Ok(OldItalic::LetterO),
'𐌐' => Ok(OldItalic::LetterPe),
'𐌑' => Ok(OldItalic::LetterShe),
'𐌒' => Ok(OldItalic::LetterKu),
'𐌓' => Ok(OldItalic::LetterEr),
'𐌔' => Ok(OldItalic::LetterEs),
'𐌕' => Ok(OldItalic::LetterTe),
'𐌖' => Ok(OldItalic::LetterU),
'𐌗' => Ok(OldItalic::LetterEks),
'𐌘' => Ok(OldItalic::LetterPhe),
'𐌙' => Ok(OldItalic::LetterKhe),
'𐌚' => Ok(OldItalic::LetterEf),
'𐌛' => Ok(OldItalic::LetterErs),
'𐌜' => Ok(OldItalic::LetterChe),
'𐌝' => Ok(OldItalic::LetterIi),
'𐌞' => Ok(OldItalic::LetterUu),
'𐌟' => Ok(OldItalic::LetterEss),
'𐌠' => Ok(OldItalic::NumeralOne),
'𐌡' => Ok(OldItalic::NumeralFive),
'𐌢' => Ok(OldItalic::NumeralTen),
'𐌣' => Ok(OldItalic::NumeralFifty),
'𐌭' => Ok(OldItalic::LetterYe),
'𐌮' => Ok(OldItalic::LetterNorthernTse),
_ => Err(()),
}
}
}
impl Into<u32> for OldItalic {
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 OldItalic {
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 OldItalic {
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 OldItalic {
pub fn new() -> Self {
OldItalic::LetterA
}
pub fn name(&self) -> String {
let s = std::format!("OldItalic{:#?}", self);
string_morph::to_sentence_case(&s)
}
}