mod constants {
pub const LETTER_ALEPH: char = '𐭠';
pub const LETTER_BETH: char = '𐭡';
pub const LETTER_GIMEL: char = '𐭢';
pub const LETTER_DALETH: char = '𐭣';
pub const LETTER_HE: char = '𐭤';
pub const LETTER_WAW_DASH_AYIN_DASH_RESH: char = '𐭥';
pub const LETTER_ZAYIN: char = '𐭦';
pub const LETTER_HETH: char = '𐭧';
pub const LETTER_TETH: char = '𐭨';
pub const LETTER_YODH: char = '𐭩';
pub const LETTER_KAPH: char = '𐭪';
pub const LETTER_LAMEDH: char = '𐭫';
pub const LETTER_MEM_DASH_QOPH: char = '𐭬';
pub const LETTER_NUN: char = '𐭭';
pub const LETTER_SAMEKH: char = '𐭮';
pub const LETTER_PE: char = '𐭯';
pub const LETTER_SADHE: char = '𐭰';
pub const LETTER_SHIN: char = '𐭱';
pub const LETTER_TAW: char = '𐭲';
pub const NUMBER_ONE: char = '𐭸';
pub const NUMBER_TWO: char = '𐭹';
pub const NUMBER_THREE: char = '𐭺';
pub const NUMBER_FOUR: char = '𐭻';
pub const NUMBER_TEN: char = '𐭼';
pub const NUMBER_TWENTY: char = '𐭽';
pub const NUMBER_ONE_HUNDRED: char = '𐭾';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum InscriptionalPahlavi {
LetterAleph,
LetterBeth,
LetterGimel,
LetterDaleth,
LetterHe,
LetterWawDashAyinDashResh,
LetterZayin,
LetterHeth,
LetterTeth,
LetterYodh,
LetterKaph,
LetterLamedh,
LetterMemDashQoph,
LetterNun,
LetterSamekh,
LetterPe,
LetterSadhe,
LetterShin,
LetterTaw,
NumberOne,
NumberTwo,
NumberThree,
NumberFour,
NumberTen,
NumberTwenty,
NumberOneHundred,
}
impl Into<char> for InscriptionalPahlavi {
fn into(self) -> char {
use constants::*;
match self {
InscriptionalPahlavi::LetterAleph => LETTER_ALEPH,
InscriptionalPahlavi::LetterBeth => LETTER_BETH,
InscriptionalPahlavi::LetterGimel => LETTER_GIMEL,
InscriptionalPahlavi::LetterDaleth => LETTER_DALETH,
InscriptionalPahlavi::LetterHe => LETTER_HE,
InscriptionalPahlavi::LetterWawDashAyinDashResh => LETTER_WAW_DASH_AYIN_DASH_RESH,
InscriptionalPahlavi::LetterZayin => LETTER_ZAYIN,
InscriptionalPahlavi::LetterHeth => LETTER_HETH,
InscriptionalPahlavi::LetterTeth => LETTER_TETH,
InscriptionalPahlavi::LetterYodh => LETTER_YODH,
InscriptionalPahlavi::LetterKaph => LETTER_KAPH,
InscriptionalPahlavi::LetterLamedh => LETTER_LAMEDH,
InscriptionalPahlavi::LetterMemDashQoph => LETTER_MEM_DASH_QOPH,
InscriptionalPahlavi::LetterNun => LETTER_NUN,
InscriptionalPahlavi::LetterSamekh => LETTER_SAMEKH,
InscriptionalPahlavi::LetterPe => LETTER_PE,
InscriptionalPahlavi::LetterSadhe => LETTER_SADHE,
InscriptionalPahlavi::LetterShin => LETTER_SHIN,
InscriptionalPahlavi::LetterTaw => LETTER_TAW,
InscriptionalPahlavi::NumberOne => NUMBER_ONE,
InscriptionalPahlavi::NumberTwo => NUMBER_TWO,
InscriptionalPahlavi::NumberThree => NUMBER_THREE,
InscriptionalPahlavi::NumberFour => NUMBER_FOUR,
InscriptionalPahlavi::NumberTen => NUMBER_TEN,
InscriptionalPahlavi::NumberTwenty => NUMBER_TWENTY,
InscriptionalPahlavi::NumberOneHundred => NUMBER_ONE_HUNDRED,
}
}
}
impl std::convert::TryFrom<char> for InscriptionalPahlavi {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_ALEPH => Ok(InscriptionalPahlavi::LetterAleph),
LETTER_BETH => Ok(InscriptionalPahlavi::LetterBeth),
LETTER_GIMEL => Ok(InscriptionalPahlavi::LetterGimel),
LETTER_DALETH => Ok(InscriptionalPahlavi::LetterDaleth),
LETTER_HE => Ok(InscriptionalPahlavi::LetterHe),
LETTER_WAW_DASH_AYIN_DASH_RESH => Ok(InscriptionalPahlavi::LetterWawDashAyinDashResh),
LETTER_ZAYIN => Ok(InscriptionalPahlavi::LetterZayin),
LETTER_HETH => Ok(InscriptionalPahlavi::LetterHeth),
LETTER_TETH => Ok(InscriptionalPahlavi::LetterTeth),
LETTER_YODH => Ok(InscriptionalPahlavi::LetterYodh),
LETTER_KAPH => Ok(InscriptionalPahlavi::LetterKaph),
LETTER_LAMEDH => Ok(InscriptionalPahlavi::LetterLamedh),
LETTER_MEM_DASH_QOPH => Ok(InscriptionalPahlavi::LetterMemDashQoph),
LETTER_NUN => Ok(InscriptionalPahlavi::LetterNun),
LETTER_SAMEKH => Ok(InscriptionalPahlavi::LetterSamekh),
LETTER_PE => Ok(InscriptionalPahlavi::LetterPe),
LETTER_SADHE => Ok(InscriptionalPahlavi::LetterSadhe),
LETTER_SHIN => Ok(InscriptionalPahlavi::LetterShin),
LETTER_TAW => Ok(InscriptionalPahlavi::LetterTaw),
NUMBER_ONE => Ok(InscriptionalPahlavi::NumberOne),
NUMBER_TWO => Ok(InscriptionalPahlavi::NumberTwo),
NUMBER_THREE => Ok(InscriptionalPahlavi::NumberThree),
NUMBER_FOUR => Ok(InscriptionalPahlavi::NumberFour),
NUMBER_TEN => Ok(InscriptionalPahlavi::NumberTen),
NUMBER_TWENTY => Ok(InscriptionalPahlavi::NumberTwenty),
NUMBER_ONE_HUNDRED => Ok(InscriptionalPahlavi::NumberOneHundred),
_ => Err(()),
}
}
}
impl Into<u32> for InscriptionalPahlavi {
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 InscriptionalPahlavi {
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 InscriptionalPahlavi {
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 InscriptionalPahlavi {
pub fn new() -> Self {
InscriptionalPahlavi::LetterAleph
}
pub fn name(&self) -> &str {
match self {
InscriptionalPahlavi::LetterAleph => "inscriptional pahlavi letter aleph",
InscriptionalPahlavi::LetterBeth => "inscriptional pahlavi letter beth",
InscriptionalPahlavi::LetterGimel => "inscriptional pahlavi letter gimel",
InscriptionalPahlavi::LetterDaleth => "inscriptional pahlavi letter daleth",
InscriptionalPahlavi::LetterHe => "inscriptional pahlavi letter he",
InscriptionalPahlavi::LetterWawDashAyinDashResh => "inscriptional pahlavi letter waw-ayin-resh",
InscriptionalPahlavi::LetterZayin => "inscriptional pahlavi letter zayin",
InscriptionalPahlavi::LetterHeth => "inscriptional pahlavi letter heth",
InscriptionalPahlavi::LetterTeth => "inscriptional pahlavi letter teth",
InscriptionalPahlavi::LetterYodh => "inscriptional pahlavi letter yodh",
InscriptionalPahlavi::LetterKaph => "inscriptional pahlavi letter kaph",
InscriptionalPahlavi::LetterLamedh => "inscriptional pahlavi letter lamedh",
InscriptionalPahlavi::LetterMemDashQoph => "inscriptional pahlavi letter mem-qoph",
InscriptionalPahlavi::LetterNun => "inscriptional pahlavi letter nun",
InscriptionalPahlavi::LetterSamekh => "inscriptional pahlavi letter samekh",
InscriptionalPahlavi::LetterPe => "inscriptional pahlavi letter pe",
InscriptionalPahlavi::LetterSadhe => "inscriptional pahlavi letter sadhe",
InscriptionalPahlavi::LetterShin => "inscriptional pahlavi letter shin",
InscriptionalPahlavi::LetterTaw => "inscriptional pahlavi letter taw",
InscriptionalPahlavi::NumberOne => "inscriptional pahlavi number one",
InscriptionalPahlavi::NumberTwo => "inscriptional pahlavi number two",
InscriptionalPahlavi::NumberThree => "inscriptional pahlavi number three",
InscriptionalPahlavi::NumberFour => "inscriptional pahlavi number four",
InscriptionalPahlavi::NumberTen => "inscriptional pahlavi number ten",
InscriptionalPahlavi::NumberTwenty => "inscriptional pahlavi number twenty",
InscriptionalPahlavi::NumberOneHundred => "inscriptional pahlavi number one hundred",
}
}
}