#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Samaritan {
LetterAlaf,
LetterBit,
LetterGaman,
LetterDalat,
LetterIy,
LetterBaa,
LetterZen,
LetterIt,
LetterTit,
LetterYut,
LetterKaaf,
LetterLabat,
LetterMim,
LetterNun,
LetterSingaat,
LetterIn,
LetterFi,
LetterTsaadiy,
LetterQuf,
LetterRish,
LetterShan,
LetterTaaf,
MarkIn,
MarkInDashAlaf,
MarkOcclusion,
MarkDagesh,
ModifierLetterEpentheticYut,
MarkEpentheticYut,
VowelSignLongE,
VowelSignE,
VowelSignOverlongAa,
VowelSignLongAa,
VowelSignAa,
VowelSignOverlongA,
VowelSignLongA,
VowelSignA,
ModifierLetterShortA,
VowelSignShortA,
VowelSignLongU,
VowelSignU,
ModifierLetterI,
VowelSignLongI,
VowelSignI,
VowelSignO,
VowelSignSukun,
MarkNequdaa,
PunctuationNequdaa,
PunctuationAfsaaq,
PunctuationAnged,
PunctuationBau,
PunctuationAtmaau,
PunctuationShiyyaalaa,
AbbreviationMark,
PunctuationMelodicQitsa,
PunctuationZiqaa,
PunctuationQitsa,
PunctuationZaef,
PunctuationTuru,
PunctuationArkaanu,
PunctuationSofMashfaat,
PunctuationAnnaau,
}
impl Into<char> for Samaritan {
fn into(self) -> char {
match self {
Samaritan::LetterAlaf => 'ࠀ',
Samaritan::LetterBit => 'ࠁ',
Samaritan::LetterGaman => 'ࠂ',
Samaritan::LetterDalat => 'ࠃ',
Samaritan::LetterIy => 'ࠄ',
Samaritan::LetterBaa => 'ࠅ',
Samaritan::LetterZen => 'ࠆ',
Samaritan::LetterIt => 'ࠇ',
Samaritan::LetterTit => 'ࠈ',
Samaritan::LetterYut => 'ࠉ',
Samaritan::LetterKaaf => 'ࠊ',
Samaritan::LetterLabat => 'ࠋ',
Samaritan::LetterMim => 'ࠌ',
Samaritan::LetterNun => 'ࠍ',
Samaritan::LetterSingaat => 'ࠎ',
Samaritan::LetterIn => 'ࠏ',
Samaritan::LetterFi => 'ࠐ',
Samaritan::LetterTsaadiy => 'ࠑ',
Samaritan::LetterQuf => 'ࠒ',
Samaritan::LetterRish => 'ࠓ',
Samaritan::LetterShan => 'ࠔ',
Samaritan::LetterTaaf => 'ࠕ',
Samaritan::MarkIn => 'ࠖ',
Samaritan::MarkInDashAlaf => 'ࠗ',
Samaritan::MarkOcclusion => '࠘',
Samaritan::MarkDagesh => '࠙',
Samaritan::ModifierLetterEpentheticYut => 'ࠚ',
Samaritan::MarkEpentheticYut => 'ࠛ',
Samaritan::VowelSignLongE => 'ࠜ',
Samaritan::VowelSignE => 'ࠝ',
Samaritan::VowelSignOverlongAa => 'ࠞ',
Samaritan::VowelSignLongAa => 'ࠟ',
Samaritan::VowelSignAa => 'ࠠ',
Samaritan::VowelSignOverlongA => 'ࠡ',
Samaritan::VowelSignLongA => 'ࠢ',
Samaritan::VowelSignA => 'ࠣ',
Samaritan::ModifierLetterShortA => 'ࠤ',
Samaritan::VowelSignShortA => 'ࠥ',
Samaritan::VowelSignLongU => 'ࠦ',
Samaritan::VowelSignU => 'ࠧ',
Samaritan::ModifierLetterI => 'ࠨ',
Samaritan::VowelSignLongI => 'ࠩ',
Samaritan::VowelSignI => 'ࠪ',
Samaritan::VowelSignO => 'ࠫ',
Samaritan::VowelSignSukun => 'ࠬ',
Samaritan::MarkNequdaa => '࠭',
Samaritan::PunctuationNequdaa => '࠰',
Samaritan::PunctuationAfsaaq => '࠱',
Samaritan::PunctuationAnged => '࠲',
Samaritan::PunctuationBau => '࠳',
Samaritan::PunctuationAtmaau => '࠴',
Samaritan::PunctuationShiyyaalaa => '࠵',
Samaritan::AbbreviationMark => '࠶',
Samaritan::PunctuationMelodicQitsa => '࠷',
Samaritan::PunctuationZiqaa => '࠸',
Samaritan::PunctuationQitsa => '࠹',
Samaritan::PunctuationZaef => '࠺',
Samaritan::PunctuationTuru => '࠻',
Samaritan::PunctuationArkaanu => '࠼',
Samaritan::PunctuationSofMashfaat => '࠽',
Samaritan::PunctuationAnnaau => '࠾',
}
}
}
impl std::convert::TryFrom<char> for Samaritan {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'ࠀ' => Ok(Samaritan::LetterAlaf),
'ࠁ' => Ok(Samaritan::LetterBit),
'ࠂ' => Ok(Samaritan::LetterGaman),
'ࠃ' => Ok(Samaritan::LetterDalat),
'ࠄ' => Ok(Samaritan::LetterIy),
'ࠅ' => Ok(Samaritan::LetterBaa),
'ࠆ' => Ok(Samaritan::LetterZen),
'ࠇ' => Ok(Samaritan::LetterIt),
'ࠈ' => Ok(Samaritan::LetterTit),
'ࠉ' => Ok(Samaritan::LetterYut),
'ࠊ' => Ok(Samaritan::LetterKaaf),
'ࠋ' => Ok(Samaritan::LetterLabat),
'ࠌ' => Ok(Samaritan::LetterMim),
'ࠍ' => Ok(Samaritan::LetterNun),
'ࠎ' => Ok(Samaritan::LetterSingaat),
'ࠏ' => Ok(Samaritan::LetterIn),
'ࠐ' => Ok(Samaritan::LetterFi),
'ࠑ' => Ok(Samaritan::LetterTsaadiy),
'ࠒ' => Ok(Samaritan::LetterQuf),
'ࠓ' => Ok(Samaritan::LetterRish),
'ࠔ' => Ok(Samaritan::LetterShan),
'ࠕ' => Ok(Samaritan::LetterTaaf),
'ࠖ' => Ok(Samaritan::MarkIn),
'ࠗ' => Ok(Samaritan::MarkInDashAlaf),
'࠘' => Ok(Samaritan::MarkOcclusion),
'࠙' => Ok(Samaritan::MarkDagesh),
'ࠚ' => Ok(Samaritan::ModifierLetterEpentheticYut),
'ࠛ' => Ok(Samaritan::MarkEpentheticYut),
'ࠜ' => Ok(Samaritan::VowelSignLongE),
'ࠝ' => Ok(Samaritan::VowelSignE),
'ࠞ' => Ok(Samaritan::VowelSignOverlongAa),
'ࠟ' => Ok(Samaritan::VowelSignLongAa),
'ࠠ' => Ok(Samaritan::VowelSignAa),
'ࠡ' => Ok(Samaritan::VowelSignOverlongA),
'ࠢ' => Ok(Samaritan::VowelSignLongA),
'ࠣ' => Ok(Samaritan::VowelSignA),
'ࠤ' => Ok(Samaritan::ModifierLetterShortA),
'ࠥ' => Ok(Samaritan::VowelSignShortA),
'ࠦ' => Ok(Samaritan::VowelSignLongU),
'ࠧ' => Ok(Samaritan::VowelSignU),
'ࠨ' => Ok(Samaritan::ModifierLetterI),
'ࠩ' => Ok(Samaritan::VowelSignLongI),
'ࠪ' => Ok(Samaritan::VowelSignI),
'ࠫ' => Ok(Samaritan::VowelSignO),
'ࠬ' => Ok(Samaritan::VowelSignSukun),
'࠭' => Ok(Samaritan::MarkNequdaa),
'࠰' => Ok(Samaritan::PunctuationNequdaa),
'࠱' => Ok(Samaritan::PunctuationAfsaaq),
'࠲' => Ok(Samaritan::PunctuationAnged),
'࠳' => Ok(Samaritan::PunctuationBau),
'࠴' => Ok(Samaritan::PunctuationAtmaau),
'࠵' => Ok(Samaritan::PunctuationShiyyaalaa),
'࠶' => Ok(Samaritan::AbbreviationMark),
'࠷' => Ok(Samaritan::PunctuationMelodicQitsa),
'࠸' => Ok(Samaritan::PunctuationZiqaa),
'࠹' => Ok(Samaritan::PunctuationQitsa),
'࠺' => Ok(Samaritan::PunctuationZaef),
'࠻' => Ok(Samaritan::PunctuationTuru),
'࠼' => Ok(Samaritan::PunctuationArkaanu),
'࠽' => Ok(Samaritan::PunctuationSofMashfaat),
'࠾' => Ok(Samaritan::PunctuationAnnaau),
_ => Err(()),
}
}
}
impl Into<u32> for Samaritan {
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 Samaritan {
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 Samaritan {
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 Samaritan {
pub fn new() -> Self {
Samaritan::LetterAlaf
}
pub fn name(&self) -> String {
let s = std::format!("Samaritan{:#?}", self);
string_morph::to_sentence_case(&s)
}
}