#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Palmyrene {
LetterAleph,
LetterBeth,
LetterGimel,
LetterDaleth,
LetterHe,
LetterWaw,
LetterZayin,
LetterHeth,
LetterTeth,
LetterYodh,
LetterKaph,
LetterLamedh,
LetterMem,
LetterFinalNun,
LetterNun,
LetterSamekh,
LetterAyin,
LetterPe,
LetterSadhe,
LetterQoph,
LetterResh,
LetterShin,
LetterTaw,
LeftDashPointingFleuron,
RightDashPointingFleuron,
NumberOne,
NumberTwo,
NumberThree,
NumberFour,
NumberFive,
NumberTen,
}
impl Into<char> for Palmyrene {
fn into(self) -> char {
match self {
Palmyrene::LetterAleph => '𐡠',
Palmyrene::LetterBeth => '𐡡',
Palmyrene::LetterGimel => '𐡢',
Palmyrene::LetterDaleth => '𐡣',
Palmyrene::LetterHe => '𐡤',
Palmyrene::LetterWaw => '𐡥',
Palmyrene::LetterZayin => '𐡦',
Palmyrene::LetterHeth => '𐡧',
Palmyrene::LetterTeth => '𐡨',
Palmyrene::LetterYodh => '𐡩',
Palmyrene::LetterKaph => '𐡪',
Palmyrene::LetterLamedh => '𐡫',
Palmyrene::LetterMem => '𐡬',
Palmyrene::LetterFinalNun => '𐡭',
Palmyrene::LetterNun => '𐡮',
Palmyrene::LetterSamekh => '𐡯',
Palmyrene::LetterAyin => '𐡰',
Palmyrene::LetterPe => '𐡱',
Palmyrene::LetterSadhe => '𐡲',
Palmyrene::LetterQoph => '𐡳',
Palmyrene::LetterResh => '𐡴',
Palmyrene::LetterShin => '𐡵',
Palmyrene::LetterTaw => '𐡶',
Palmyrene::LeftDashPointingFleuron => '𐡷',
Palmyrene::RightDashPointingFleuron => '𐡸',
Palmyrene::NumberOne => '𐡹',
Palmyrene::NumberTwo => '𐡺',
Palmyrene::NumberThree => '𐡻',
Palmyrene::NumberFour => '𐡼',
Palmyrene::NumberFive => '𐡽',
Palmyrene::NumberTen => '𐡾',
}
}
}
impl std::convert::TryFrom<char> for Palmyrene {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𐡠' => Ok(Palmyrene::LetterAleph),
'𐡡' => Ok(Palmyrene::LetterBeth),
'𐡢' => Ok(Palmyrene::LetterGimel),
'𐡣' => Ok(Palmyrene::LetterDaleth),
'𐡤' => Ok(Palmyrene::LetterHe),
'𐡥' => Ok(Palmyrene::LetterWaw),
'𐡦' => Ok(Palmyrene::LetterZayin),
'𐡧' => Ok(Palmyrene::LetterHeth),
'𐡨' => Ok(Palmyrene::LetterTeth),
'𐡩' => Ok(Palmyrene::LetterYodh),
'𐡪' => Ok(Palmyrene::LetterKaph),
'𐡫' => Ok(Palmyrene::LetterLamedh),
'𐡬' => Ok(Palmyrene::LetterMem),
'𐡭' => Ok(Palmyrene::LetterFinalNun),
'𐡮' => Ok(Palmyrene::LetterNun),
'𐡯' => Ok(Palmyrene::LetterSamekh),
'𐡰' => Ok(Palmyrene::LetterAyin),
'𐡱' => Ok(Palmyrene::LetterPe),
'𐡲' => Ok(Palmyrene::LetterSadhe),
'𐡳' => Ok(Palmyrene::LetterQoph),
'𐡴' => Ok(Palmyrene::LetterResh),
'𐡵' => Ok(Palmyrene::LetterShin),
'𐡶' => Ok(Palmyrene::LetterTaw),
'𐡷' => Ok(Palmyrene::LeftDashPointingFleuron),
'𐡸' => Ok(Palmyrene::RightDashPointingFleuron),
'𐡹' => Ok(Palmyrene::NumberOne),
'𐡺' => Ok(Palmyrene::NumberTwo),
'𐡻' => Ok(Palmyrene::NumberThree),
'𐡼' => Ok(Palmyrene::NumberFour),
'𐡽' => Ok(Palmyrene::NumberFive),
'𐡾' => Ok(Palmyrene::NumberTen),
_ => Err(()),
}
}
}
impl Into<u32> for Palmyrene {
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 Palmyrene {
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 Palmyrene {
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 Palmyrene {
pub fn new() -> Self {
Palmyrene::LetterAleph
}
pub fn name(&self) -> String {
let s = std::format!("Palmyrene{:#?}", self);
string_morph::to_sentence_case(&s)
}
}