mod constants {
pub const LETTER_ALAF: char = 'ࠀ';
pub const LETTER_BIT: char = 'ࠁ';
pub const LETTER_GAMAN: char = 'ࠂ';
pub const LETTER_DALAT: char = 'ࠃ';
pub const LETTER_IY: char = 'ࠄ';
pub const LETTER_BAA: char = 'ࠅ';
pub const LETTER_ZEN: char = 'ࠆ';
pub const LETTER_IT: char = 'ࠇ';
pub const LETTER_TIT: char = 'ࠈ';
pub const LETTER_YUT: char = 'ࠉ';
pub const LETTER_KAAF: char = 'ࠊ';
pub const LETTER_LABAT: char = 'ࠋ';
pub const LETTER_MIM: char = 'ࠌ';
pub const LETTER_NUN: char = 'ࠍ';
pub const LETTER_SINGAAT: char = 'ࠎ';
pub const LETTER_IN: char = 'ࠏ';
pub const LETTER_FI: char = 'ࠐ';
pub const LETTER_TSAADIY: char = 'ࠑ';
pub const LETTER_QUF: char = 'ࠒ';
pub const LETTER_RISH: char = 'ࠓ';
pub const LETTER_SHAN: char = 'ࠔ';
pub const LETTER_TAAF: char = 'ࠕ';
pub const MARK_IN: char = 'ࠖ';
pub const MARK_IN_DASH_ALAF: char = 'ࠗ';
pub const MARK_OCCLUSION: char = '࠘';
pub const MARK_DAGESH: char = '࠙';
pub const MODIFIER_LETTER_EPENTHETIC_YUT: char = 'ࠚ';
pub const MARK_EPENTHETIC_YUT: char = 'ࠛ';
pub const VOWEL_SIGN_LONG_E: char = 'ࠜ';
pub const VOWEL_SIGN_E: char = 'ࠝ';
pub const VOWEL_SIGN_OVERLONG_AA: char = 'ࠞ';
pub const VOWEL_SIGN_LONG_AA: char = 'ࠟ';
pub const VOWEL_SIGN_AA: char = 'ࠠ';
pub const VOWEL_SIGN_OVERLONG_A: char = 'ࠡ';
pub const VOWEL_SIGN_LONG_A: char = 'ࠢ';
pub const VOWEL_SIGN_A: char = 'ࠣ';
pub const MODIFIER_LETTER_SHORT_A: char = 'ࠤ';
pub const VOWEL_SIGN_SHORT_A: char = 'ࠥ';
pub const VOWEL_SIGN_LONG_U: char = 'ࠦ';
pub const VOWEL_SIGN_U: char = 'ࠧ';
pub const MODIFIER_LETTER_I: char = 'ࠨ';
pub const VOWEL_SIGN_LONG_I: char = 'ࠩ';
pub const VOWEL_SIGN_I: char = 'ࠪ';
pub const VOWEL_SIGN_O: char = 'ࠫ';
pub const VOWEL_SIGN_SUKUN: char = 'ࠬ';
pub const MARK_NEQUDAA: char = '࠭';
pub const PUNCTUATION_NEQUDAA: char = '࠰';
pub const PUNCTUATION_AFSAAQ: char = '࠱';
pub const PUNCTUATION_ANGED: char = '࠲';
pub const PUNCTUATION_BAU: char = '࠳';
pub const PUNCTUATION_ATMAAU: char = '࠴';
pub const PUNCTUATION_SHIYYAALAA: char = '࠵';
pub const ABBREVIATION_MARK: char = '࠶';
pub const PUNCTUATION_MELODIC_QITSA: char = '࠷';
pub const PUNCTUATION_ZIQAA: char = '࠸';
pub const PUNCTUATION_QITSA: char = '࠹';
pub const PUNCTUATION_ZAEF: char = '࠺';
pub const PUNCTUATION_TURU: char = '࠻';
pub const PUNCTUATION_ARKAANU: char = '࠼';
pub const PUNCTUATION_SOF_MASHFAAT: char = '࠽';
pub const PUNCTUATION_ANNAAU: char = '࠾';
}
#[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 {
use constants::*;
match self {
Samaritan::LetterAlaf => LETTER_ALAF,
Samaritan::LetterBit => LETTER_BIT,
Samaritan::LetterGaman => LETTER_GAMAN,
Samaritan::LetterDalat => LETTER_DALAT,
Samaritan::LetterIy => LETTER_IY,
Samaritan::LetterBaa => LETTER_BAA,
Samaritan::LetterZen => LETTER_ZEN,
Samaritan::LetterIt => LETTER_IT,
Samaritan::LetterTit => LETTER_TIT,
Samaritan::LetterYut => LETTER_YUT,
Samaritan::LetterKaaf => LETTER_KAAF,
Samaritan::LetterLabat => LETTER_LABAT,
Samaritan::LetterMim => LETTER_MIM,
Samaritan::LetterNun => LETTER_NUN,
Samaritan::LetterSingaat => LETTER_SINGAAT,
Samaritan::LetterIn => LETTER_IN,
Samaritan::LetterFi => LETTER_FI,
Samaritan::LetterTsaadiy => LETTER_TSAADIY,
Samaritan::LetterQuf => LETTER_QUF,
Samaritan::LetterRish => LETTER_RISH,
Samaritan::LetterShan => LETTER_SHAN,
Samaritan::LetterTaaf => LETTER_TAAF,
Samaritan::MarkIn => MARK_IN,
Samaritan::MarkInDashAlaf => MARK_IN_DASH_ALAF,
Samaritan::MarkOcclusion => MARK_OCCLUSION,
Samaritan::MarkDagesh => MARK_DAGESH,
Samaritan::ModifierLetterEpentheticYut => MODIFIER_LETTER_EPENTHETIC_YUT,
Samaritan::MarkEpentheticYut => MARK_EPENTHETIC_YUT,
Samaritan::VowelSignLongE => VOWEL_SIGN_LONG_E,
Samaritan::VowelSignE => VOWEL_SIGN_E,
Samaritan::VowelSignOverlongAa => VOWEL_SIGN_OVERLONG_AA,
Samaritan::VowelSignLongAa => VOWEL_SIGN_LONG_AA,
Samaritan::VowelSignAa => VOWEL_SIGN_AA,
Samaritan::VowelSignOverlongA => VOWEL_SIGN_OVERLONG_A,
Samaritan::VowelSignLongA => VOWEL_SIGN_LONG_A,
Samaritan::VowelSignA => VOWEL_SIGN_A,
Samaritan::ModifierLetterShortA => MODIFIER_LETTER_SHORT_A,
Samaritan::VowelSignShortA => VOWEL_SIGN_SHORT_A,
Samaritan::VowelSignLongU => VOWEL_SIGN_LONG_U,
Samaritan::VowelSignU => VOWEL_SIGN_U,
Samaritan::ModifierLetterI => MODIFIER_LETTER_I,
Samaritan::VowelSignLongI => VOWEL_SIGN_LONG_I,
Samaritan::VowelSignI => VOWEL_SIGN_I,
Samaritan::VowelSignO => VOWEL_SIGN_O,
Samaritan::VowelSignSukun => VOWEL_SIGN_SUKUN,
Samaritan::MarkNequdaa => MARK_NEQUDAA,
Samaritan::PunctuationNequdaa => PUNCTUATION_NEQUDAA,
Samaritan::PunctuationAfsaaq => PUNCTUATION_AFSAAQ,
Samaritan::PunctuationAnged => PUNCTUATION_ANGED,
Samaritan::PunctuationBau => PUNCTUATION_BAU,
Samaritan::PunctuationAtmaau => PUNCTUATION_ATMAAU,
Samaritan::PunctuationShiyyaalaa => PUNCTUATION_SHIYYAALAA,
Samaritan::AbbreviationMark => ABBREVIATION_MARK,
Samaritan::PunctuationMelodicQitsa => PUNCTUATION_MELODIC_QITSA,
Samaritan::PunctuationZiqaa => PUNCTUATION_ZIQAA,
Samaritan::PunctuationQitsa => PUNCTUATION_QITSA,
Samaritan::PunctuationZaef => PUNCTUATION_ZAEF,
Samaritan::PunctuationTuru => PUNCTUATION_TURU,
Samaritan::PunctuationArkaanu => PUNCTUATION_ARKAANU,
Samaritan::PunctuationSofMashfaat => PUNCTUATION_SOF_MASHFAAT,
Samaritan::PunctuationAnnaau => PUNCTUATION_ANNAAU,
}
}
}
impl std::convert::TryFrom<char> for Samaritan {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_ALAF => Ok(Samaritan::LetterAlaf),
LETTER_BIT => Ok(Samaritan::LetterBit),
LETTER_GAMAN => Ok(Samaritan::LetterGaman),
LETTER_DALAT => Ok(Samaritan::LetterDalat),
LETTER_IY => Ok(Samaritan::LetterIy),
LETTER_BAA => Ok(Samaritan::LetterBaa),
LETTER_ZEN => Ok(Samaritan::LetterZen),
LETTER_IT => Ok(Samaritan::LetterIt),
LETTER_TIT => Ok(Samaritan::LetterTit),
LETTER_YUT => Ok(Samaritan::LetterYut),
LETTER_KAAF => Ok(Samaritan::LetterKaaf),
LETTER_LABAT => Ok(Samaritan::LetterLabat),
LETTER_MIM => Ok(Samaritan::LetterMim),
LETTER_NUN => Ok(Samaritan::LetterNun),
LETTER_SINGAAT => Ok(Samaritan::LetterSingaat),
LETTER_IN => Ok(Samaritan::LetterIn),
LETTER_FI => Ok(Samaritan::LetterFi),
LETTER_TSAADIY => Ok(Samaritan::LetterTsaadiy),
LETTER_QUF => Ok(Samaritan::LetterQuf),
LETTER_RISH => Ok(Samaritan::LetterRish),
LETTER_SHAN => Ok(Samaritan::LetterShan),
LETTER_TAAF => Ok(Samaritan::LetterTaaf),
MARK_IN => Ok(Samaritan::MarkIn),
MARK_IN_DASH_ALAF => Ok(Samaritan::MarkInDashAlaf),
MARK_OCCLUSION => Ok(Samaritan::MarkOcclusion),
MARK_DAGESH => Ok(Samaritan::MarkDagesh),
MODIFIER_LETTER_EPENTHETIC_YUT => Ok(Samaritan::ModifierLetterEpentheticYut),
MARK_EPENTHETIC_YUT => Ok(Samaritan::MarkEpentheticYut),
VOWEL_SIGN_LONG_E => Ok(Samaritan::VowelSignLongE),
VOWEL_SIGN_E => Ok(Samaritan::VowelSignE),
VOWEL_SIGN_OVERLONG_AA => Ok(Samaritan::VowelSignOverlongAa),
VOWEL_SIGN_LONG_AA => Ok(Samaritan::VowelSignLongAa),
VOWEL_SIGN_AA => Ok(Samaritan::VowelSignAa),
VOWEL_SIGN_OVERLONG_A => Ok(Samaritan::VowelSignOverlongA),
VOWEL_SIGN_LONG_A => Ok(Samaritan::VowelSignLongA),
VOWEL_SIGN_A => Ok(Samaritan::VowelSignA),
MODIFIER_LETTER_SHORT_A => Ok(Samaritan::ModifierLetterShortA),
VOWEL_SIGN_SHORT_A => Ok(Samaritan::VowelSignShortA),
VOWEL_SIGN_LONG_U => Ok(Samaritan::VowelSignLongU),
VOWEL_SIGN_U => Ok(Samaritan::VowelSignU),
MODIFIER_LETTER_I => Ok(Samaritan::ModifierLetterI),
VOWEL_SIGN_LONG_I => Ok(Samaritan::VowelSignLongI),
VOWEL_SIGN_I => Ok(Samaritan::VowelSignI),
VOWEL_SIGN_O => Ok(Samaritan::VowelSignO),
VOWEL_SIGN_SUKUN => Ok(Samaritan::VowelSignSukun),
MARK_NEQUDAA => Ok(Samaritan::MarkNequdaa),
PUNCTUATION_NEQUDAA => Ok(Samaritan::PunctuationNequdaa),
PUNCTUATION_AFSAAQ => Ok(Samaritan::PunctuationAfsaaq),
PUNCTUATION_ANGED => Ok(Samaritan::PunctuationAnged),
PUNCTUATION_BAU => Ok(Samaritan::PunctuationBau),
PUNCTUATION_ATMAAU => Ok(Samaritan::PunctuationAtmaau),
PUNCTUATION_SHIYYAALAA => Ok(Samaritan::PunctuationShiyyaalaa),
ABBREVIATION_MARK => Ok(Samaritan::AbbreviationMark),
PUNCTUATION_MELODIC_QITSA => Ok(Samaritan::PunctuationMelodicQitsa),
PUNCTUATION_ZIQAA => Ok(Samaritan::PunctuationZiqaa),
PUNCTUATION_QITSA => Ok(Samaritan::PunctuationQitsa),
PUNCTUATION_ZAEF => Ok(Samaritan::PunctuationZaef),
PUNCTUATION_TURU => Ok(Samaritan::PunctuationTuru),
PUNCTUATION_ARKAANU => Ok(Samaritan::PunctuationArkaanu),
PUNCTUATION_SOF_MASHFAAT => Ok(Samaritan::PunctuationSofMashfaat),
PUNCTUATION_ANNAAU => 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) -> &str {
match self {
Samaritan::LetterAlaf => "samaritan letter alaf",
Samaritan::LetterBit => "samaritan letter bit",
Samaritan::LetterGaman => "samaritan letter gaman",
Samaritan::LetterDalat => "samaritan letter dalat",
Samaritan::LetterIy => "samaritan letter iy",
Samaritan::LetterBaa => "samaritan letter baa",
Samaritan::LetterZen => "samaritan letter zen",
Samaritan::LetterIt => "samaritan letter it",
Samaritan::LetterTit => "samaritan letter tit",
Samaritan::LetterYut => "samaritan letter yut",
Samaritan::LetterKaaf => "samaritan letter kaaf",
Samaritan::LetterLabat => "samaritan letter labat",
Samaritan::LetterMim => "samaritan letter mim",
Samaritan::LetterNun => "samaritan letter nun",
Samaritan::LetterSingaat => "samaritan letter singaat",
Samaritan::LetterIn => "samaritan letter in",
Samaritan::LetterFi => "samaritan letter fi",
Samaritan::LetterTsaadiy => "samaritan letter tsaadiy",
Samaritan::LetterQuf => "samaritan letter quf",
Samaritan::LetterRish => "samaritan letter rish",
Samaritan::LetterShan => "samaritan letter shan",
Samaritan::LetterTaaf => "samaritan letter taaf",
Samaritan::MarkIn => "samaritan mark in",
Samaritan::MarkInDashAlaf => "samaritan mark in-alaf",
Samaritan::MarkOcclusion => "samaritan mark occlusion",
Samaritan::MarkDagesh => "samaritan mark dagesh",
Samaritan::ModifierLetterEpentheticYut => "samaritan modifier letter epenthetic yut",
Samaritan::MarkEpentheticYut => "samaritan mark epenthetic yut",
Samaritan::VowelSignLongE => "samaritan vowel sign long e",
Samaritan::VowelSignE => "samaritan vowel sign e",
Samaritan::VowelSignOverlongAa => "samaritan vowel sign overlong aa",
Samaritan::VowelSignLongAa => "samaritan vowel sign long aa",
Samaritan::VowelSignAa => "samaritan vowel sign aa",
Samaritan::VowelSignOverlongA => "samaritan vowel sign overlong a",
Samaritan::VowelSignLongA => "samaritan vowel sign long a",
Samaritan::VowelSignA => "samaritan vowel sign a",
Samaritan::ModifierLetterShortA => "samaritan modifier letter short a",
Samaritan::VowelSignShortA => "samaritan vowel sign short a",
Samaritan::VowelSignLongU => "samaritan vowel sign long u",
Samaritan::VowelSignU => "samaritan vowel sign u",
Samaritan::ModifierLetterI => "samaritan modifier letter i",
Samaritan::VowelSignLongI => "samaritan vowel sign long i",
Samaritan::VowelSignI => "samaritan vowel sign i",
Samaritan::VowelSignO => "samaritan vowel sign o",
Samaritan::VowelSignSukun => "samaritan vowel sign sukun",
Samaritan::MarkNequdaa => "samaritan mark nequdaa",
Samaritan::PunctuationNequdaa => "samaritan punctuation nequdaa",
Samaritan::PunctuationAfsaaq => "samaritan punctuation afsaaq",
Samaritan::PunctuationAnged => "samaritan punctuation anged",
Samaritan::PunctuationBau => "samaritan punctuation bau",
Samaritan::PunctuationAtmaau => "samaritan punctuation atmaau",
Samaritan::PunctuationShiyyaalaa => "samaritan punctuation shiyyaalaa",
Samaritan::AbbreviationMark => "samaritan abbreviation mark",
Samaritan::PunctuationMelodicQitsa => "samaritan punctuation melodic qitsa",
Samaritan::PunctuationZiqaa => "samaritan punctuation ziqaa",
Samaritan::PunctuationQitsa => "samaritan punctuation qitsa",
Samaritan::PunctuationZaef => "samaritan punctuation zaef",
Samaritan::PunctuationTuru => "samaritan punctuation turu",
Samaritan::PunctuationArkaanu => "samaritan punctuation arkaanu",
Samaritan::PunctuationSofMashfaat => "samaritan punctuation sof mashfaat",
Samaritan::PunctuationAnnaau => "samaritan punctuation annaau",
}
}
}