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_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 SECTION_MARK: char = '𐮙';
pub const TURNED_SECTION_MARK: char = '𐮚';
pub const FOUR_DOTS_WITH_CROSS: char = '𐮛';
pub const FOUR_DOTS_WITH_DOT: 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 = '𐮮';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum PsalterPahlavi {
LetterAleph,
LetterBeth,
LetterGimel,
LetterDaleth,
LetterHe,
LetterWawDashAyinDashResh,
LetterZayin,
LetterHeth,
LetterYodh,
LetterKaph,
LetterLamedh,
LetterMemDashQoph,
LetterNun,
LetterSamekh,
LetterPe,
LetterSadhe,
LetterShin,
LetterTaw,
SectionMark,
TurnedSectionMark,
FourDotsWithCross,
FourDotsWithDot,
NumberOne,
NumberTwo,
NumberThree,
NumberFour,
NumberTen,
NumberTwenty,
}
impl Into<char> for PsalterPahlavi {
fn into(self) -> char {
use constants::*;
match self {
PsalterPahlavi::LetterAleph => LETTER_ALEPH,
PsalterPahlavi::LetterBeth => LETTER_BETH,
PsalterPahlavi::LetterGimel => LETTER_GIMEL,
PsalterPahlavi::LetterDaleth => LETTER_DALETH,
PsalterPahlavi::LetterHe => LETTER_HE,
PsalterPahlavi::LetterWawDashAyinDashResh => LETTER_WAW_DASH_AYIN_DASH_RESH,
PsalterPahlavi::LetterZayin => LETTER_ZAYIN,
PsalterPahlavi::LetterHeth => LETTER_HETH,
PsalterPahlavi::LetterYodh => LETTER_YODH,
PsalterPahlavi::LetterKaph => LETTER_KAPH,
PsalterPahlavi::LetterLamedh => LETTER_LAMEDH,
PsalterPahlavi::LetterMemDashQoph => LETTER_MEM_DASH_QOPH,
PsalterPahlavi::LetterNun => LETTER_NUN,
PsalterPahlavi::LetterSamekh => LETTER_SAMEKH,
PsalterPahlavi::LetterPe => LETTER_PE,
PsalterPahlavi::LetterSadhe => LETTER_SADHE,
PsalterPahlavi::LetterShin => LETTER_SHIN,
PsalterPahlavi::LetterTaw => LETTER_TAW,
PsalterPahlavi::SectionMark => SECTION_MARK,
PsalterPahlavi::TurnedSectionMark => TURNED_SECTION_MARK,
PsalterPahlavi::FourDotsWithCross => FOUR_DOTS_WITH_CROSS,
PsalterPahlavi::FourDotsWithDot => FOUR_DOTS_WITH_DOT,
PsalterPahlavi::NumberOne => NUMBER_ONE,
PsalterPahlavi::NumberTwo => NUMBER_TWO,
PsalterPahlavi::NumberThree => NUMBER_THREE,
PsalterPahlavi::NumberFour => NUMBER_FOUR,
PsalterPahlavi::NumberTen => NUMBER_TEN,
PsalterPahlavi::NumberTwenty => NUMBER_TWENTY,
}
}
}
impl std::convert::TryFrom<char> for PsalterPahlavi {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_ALEPH => Ok(PsalterPahlavi::LetterAleph),
LETTER_BETH => Ok(PsalterPahlavi::LetterBeth),
LETTER_GIMEL => Ok(PsalterPahlavi::LetterGimel),
LETTER_DALETH => Ok(PsalterPahlavi::LetterDaleth),
LETTER_HE => Ok(PsalterPahlavi::LetterHe),
LETTER_WAW_DASH_AYIN_DASH_RESH => Ok(PsalterPahlavi::LetterWawDashAyinDashResh),
LETTER_ZAYIN => Ok(PsalterPahlavi::LetterZayin),
LETTER_HETH => Ok(PsalterPahlavi::LetterHeth),
LETTER_YODH => Ok(PsalterPahlavi::LetterYodh),
LETTER_KAPH => Ok(PsalterPahlavi::LetterKaph),
LETTER_LAMEDH => Ok(PsalterPahlavi::LetterLamedh),
LETTER_MEM_DASH_QOPH => Ok(PsalterPahlavi::LetterMemDashQoph),
LETTER_NUN => Ok(PsalterPahlavi::LetterNun),
LETTER_SAMEKH => Ok(PsalterPahlavi::LetterSamekh),
LETTER_PE => Ok(PsalterPahlavi::LetterPe),
LETTER_SADHE => Ok(PsalterPahlavi::LetterSadhe),
LETTER_SHIN => Ok(PsalterPahlavi::LetterShin),
LETTER_TAW => Ok(PsalterPahlavi::LetterTaw),
SECTION_MARK => Ok(PsalterPahlavi::SectionMark),
TURNED_SECTION_MARK => Ok(PsalterPahlavi::TurnedSectionMark),
FOUR_DOTS_WITH_CROSS => Ok(PsalterPahlavi::FourDotsWithCross),
FOUR_DOTS_WITH_DOT => Ok(PsalterPahlavi::FourDotsWithDot),
NUMBER_ONE => Ok(PsalterPahlavi::NumberOne),
NUMBER_TWO => Ok(PsalterPahlavi::NumberTwo),
NUMBER_THREE => Ok(PsalterPahlavi::NumberThree),
NUMBER_FOUR => Ok(PsalterPahlavi::NumberFour),
NUMBER_TEN => Ok(PsalterPahlavi::NumberTen),
NUMBER_TWENTY => Ok(PsalterPahlavi::NumberTwenty),
_ => Err(()),
}
}
}
impl Into<u32> for PsalterPahlavi {
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 PsalterPahlavi {
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 PsalterPahlavi {
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 PsalterPahlavi {
pub fn new() -> Self {
PsalterPahlavi::LetterAleph
}
pub fn name(&self) -> &str {
match self {
PsalterPahlavi::LetterAleph => "psalter pahlavi letter aleph",
PsalterPahlavi::LetterBeth => "psalter pahlavi letter beth",
PsalterPahlavi::LetterGimel => "psalter pahlavi letter gimel",
PsalterPahlavi::LetterDaleth => "psalter pahlavi letter daleth",
PsalterPahlavi::LetterHe => "psalter pahlavi letter he",
PsalterPahlavi::LetterWawDashAyinDashResh => "psalter pahlavi letter waw-ayin-resh",
PsalterPahlavi::LetterZayin => "psalter pahlavi letter zayin",
PsalterPahlavi::LetterHeth => "psalter pahlavi letter heth",
PsalterPahlavi::LetterYodh => "psalter pahlavi letter yodh",
PsalterPahlavi::LetterKaph => "psalter pahlavi letter kaph",
PsalterPahlavi::LetterLamedh => "psalter pahlavi letter lamedh",
PsalterPahlavi::LetterMemDashQoph => "psalter pahlavi letter mem-qoph",
PsalterPahlavi::LetterNun => "psalter pahlavi letter nun",
PsalterPahlavi::LetterSamekh => "psalter pahlavi letter samekh",
PsalterPahlavi::LetterPe => "psalter pahlavi letter pe",
PsalterPahlavi::LetterSadhe => "psalter pahlavi letter sadhe",
PsalterPahlavi::LetterShin => "psalter pahlavi letter shin",
PsalterPahlavi::LetterTaw => "psalter pahlavi letter taw",
PsalterPahlavi::SectionMark => "psalter pahlavi section mark",
PsalterPahlavi::TurnedSectionMark => "psalter pahlavi turned section mark",
PsalterPahlavi::FourDotsWithCross => "psalter pahlavi four dots with cross",
PsalterPahlavi::FourDotsWithDot => "psalter pahlavi four dots with dot",
PsalterPahlavi::NumberOne => "psalter pahlavi number one",
PsalterPahlavi::NumberTwo => "psalter pahlavi number two",
PsalterPahlavi::NumberThree => "psalter pahlavi number three",
PsalterPahlavi::NumberFour => "psalter pahlavi number four",
PsalterPahlavi::NumberTen => "psalter pahlavi number ten",
PsalterPahlavi::NumberTwenty => "psalter pahlavi number twenty",
}
}
}