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: 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: char = '𐡬';
pub const LETTER_FINAL_NUN: char = '𐡭';
pub const LETTER_NUN: char = '𐡮';
pub const LETTER_SAMEKH: char = '𐡯';
pub const LETTER_AYIN: char = '𐡰';
pub const LETTER_PE: char = '𐡱';
pub const LETTER_SADHE: char = '𐡲';
pub const LETTER_QOPH: char = '𐡳';
pub const LETTER_RESH: char = '𐡴';
pub const LETTER_SHIN: char = '𐡵';
pub const LETTER_TAW: char = '𐡶';
pub const LEFT_DASH_POINTING_FLEURON: char = '𐡷';
pub const RIGHT_DASH_POINTING_FLEURON: char = '𐡸';
pub const NUMBER_ONE: char = '𐡹';
pub const NUMBER_TWO: char = '𐡺';
pub const NUMBER_THREE: char = '𐡻';
pub const NUMBER_FOUR: char = '𐡼';
pub const NUMBER_FIVE: char = '𐡽';
pub const NUMBER_TEN: char = '𐡾';
}
#[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 {
use constants::*;
match self {
Palmyrene::LetterAleph => LETTER_ALEPH,
Palmyrene::LetterBeth => LETTER_BETH,
Palmyrene::LetterGimel => LETTER_GIMEL,
Palmyrene::LetterDaleth => LETTER_DALETH,
Palmyrene::LetterHe => LETTER_HE,
Palmyrene::LetterWaw => LETTER_WAW,
Palmyrene::LetterZayin => LETTER_ZAYIN,
Palmyrene::LetterHeth => LETTER_HETH,
Palmyrene::LetterTeth => LETTER_TETH,
Palmyrene::LetterYodh => LETTER_YODH,
Palmyrene::LetterKaph => LETTER_KAPH,
Palmyrene::LetterLamedh => LETTER_LAMEDH,
Palmyrene::LetterMem => LETTER_MEM,
Palmyrene::LetterFinalNun => LETTER_FINAL_NUN,
Palmyrene::LetterNun => LETTER_NUN,
Palmyrene::LetterSamekh => LETTER_SAMEKH,
Palmyrene::LetterAyin => LETTER_AYIN,
Palmyrene::LetterPe => LETTER_PE,
Palmyrene::LetterSadhe => LETTER_SADHE,
Palmyrene::LetterQoph => LETTER_QOPH,
Palmyrene::LetterResh => LETTER_RESH,
Palmyrene::LetterShin => LETTER_SHIN,
Palmyrene::LetterTaw => LETTER_TAW,
Palmyrene::LeftDashPointingFleuron => LEFT_DASH_POINTING_FLEURON,
Palmyrene::RightDashPointingFleuron => RIGHT_DASH_POINTING_FLEURON,
Palmyrene::NumberOne => NUMBER_ONE,
Palmyrene::NumberTwo => NUMBER_TWO,
Palmyrene::NumberThree => NUMBER_THREE,
Palmyrene::NumberFour => NUMBER_FOUR,
Palmyrene::NumberFive => NUMBER_FIVE,
Palmyrene::NumberTen => NUMBER_TEN,
}
}
}
impl std::convert::TryFrom<char> for Palmyrene {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_ALEPH => Ok(Palmyrene::LetterAleph),
LETTER_BETH => Ok(Palmyrene::LetterBeth),
LETTER_GIMEL => Ok(Palmyrene::LetterGimel),
LETTER_DALETH => Ok(Palmyrene::LetterDaleth),
LETTER_HE => Ok(Palmyrene::LetterHe),
LETTER_WAW => Ok(Palmyrene::LetterWaw),
LETTER_ZAYIN => Ok(Palmyrene::LetterZayin),
LETTER_HETH => Ok(Palmyrene::LetterHeth),
LETTER_TETH => Ok(Palmyrene::LetterTeth),
LETTER_YODH => Ok(Palmyrene::LetterYodh),
LETTER_KAPH => Ok(Palmyrene::LetterKaph),
LETTER_LAMEDH => Ok(Palmyrene::LetterLamedh),
LETTER_MEM => Ok(Palmyrene::LetterMem),
LETTER_FINAL_NUN => Ok(Palmyrene::LetterFinalNun),
LETTER_NUN => Ok(Palmyrene::LetterNun),
LETTER_SAMEKH => Ok(Palmyrene::LetterSamekh),
LETTER_AYIN => Ok(Palmyrene::LetterAyin),
LETTER_PE => Ok(Palmyrene::LetterPe),
LETTER_SADHE => Ok(Palmyrene::LetterSadhe),
LETTER_QOPH => Ok(Palmyrene::LetterQoph),
LETTER_RESH => Ok(Palmyrene::LetterResh),
LETTER_SHIN => Ok(Palmyrene::LetterShin),
LETTER_TAW => Ok(Palmyrene::LetterTaw),
LEFT_DASH_POINTING_FLEURON => Ok(Palmyrene::LeftDashPointingFleuron),
RIGHT_DASH_POINTING_FLEURON => Ok(Palmyrene::RightDashPointingFleuron),
NUMBER_ONE => Ok(Palmyrene::NumberOne),
NUMBER_TWO => Ok(Palmyrene::NumberTwo),
NUMBER_THREE => Ok(Palmyrene::NumberThree),
NUMBER_FOUR => Ok(Palmyrene::NumberFour),
NUMBER_FIVE => Ok(Palmyrene::NumberFive),
NUMBER_TEN => 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) -> &str {
match self {
Palmyrene::LetterAleph => "palmyrene letter aleph",
Palmyrene::LetterBeth => "palmyrene letter beth",
Palmyrene::LetterGimel => "palmyrene letter gimel",
Palmyrene::LetterDaleth => "palmyrene letter daleth",
Palmyrene::LetterHe => "palmyrene letter he",
Palmyrene::LetterWaw => "palmyrene letter waw",
Palmyrene::LetterZayin => "palmyrene letter zayin",
Palmyrene::LetterHeth => "palmyrene letter heth",
Palmyrene::LetterTeth => "palmyrene letter teth",
Palmyrene::LetterYodh => "palmyrene letter yodh",
Palmyrene::LetterKaph => "palmyrene letter kaph",
Palmyrene::LetterLamedh => "palmyrene letter lamedh",
Palmyrene::LetterMem => "palmyrene letter mem",
Palmyrene::LetterFinalNun => "palmyrene letter final nun",
Palmyrene::LetterNun => "palmyrene letter nun",
Palmyrene::LetterSamekh => "palmyrene letter samekh",
Palmyrene::LetterAyin => "palmyrene letter ayin",
Palmyrene::LetterPe => "palmyrene letter pe",
Palmyrene::LetterSadhe => "palmyrene letter sadhe",
Palmyrene::LetterQoph => "palmyrene letter qoph",
Palmyrene::LetterResh => "palmyrene letter resh",
Palmyrene::LetterShin => "palmyrene letter shin",
Palmyrene::LetterTaw => "palmyrene letter taw",
Palmyrene::LeftDashPointingFleuron => "palmyrene left-pointing fleuron",
Palmyrene::RightDashPointingFleuron => "palmyrene right-pointing fleuron",
Palmyrene::NumberOne => "palmyrene number one",
Palmyrene::NumberTwo => "palmyrene number two",
Palmyrene::NumberThree => "palmyrene number three",
Palmyrene::NumberFour => "palmyrene number four",
Palmyrene::NumberFive => "palmyrene number five",
Palmyrene::NumberTen => "palmyrene number ten",
}
}
}