mod constants {
pub const LETTER_SAH: char = '𑃐';
pub const LETTER_TAH: char = '𑃑';
pub const LETTER_BAH: char = '𑃒';
pub const LETTER_CAH: char = '𑃓';
pub const LETTER_DAH: char = '𑃔';
pub const LETTER_GAH: char = '𑃕';
pub const LETTER_MAH: char = '𑃖';
pub const LETTER_NGAH: char = '𑃗';
pub const LETTER_LAH: char = '𑃘';
pub const LETTER_NAH: char = '𑃙';
pub const LETTER_VAH: char = '𑃚';
pub const LETTER_PAH: char = '𑃛';
pub const LETTER_YAH: char = '𑃜';
pub const LETTER_RAH: char = '𑃝';
pub const LETTER_HAH: char = '𑃞';
pub const LETTER_KAH: char = '𑃟';
pub const LETTER_JAH: char = '𑃠';
pub const LETTER_NYAH: char = '𑃡';
pub const LETTER_AH: char = '𑃢';
pub const LETTER_EEH: char = '𑃣';
pub const LETTER_IH: char = '𑃤';
pub const LETTER_UH: char = '𑃥';
pub const LETTER_OH: char = '𑃦';
pub const LETTER_EH: char = '𑃧';
pub const LETTER_MAE: char = '𑃨';
pub const DIGIT_ZERO: char = '𑃰';
pub const DIGIT_ONE: char = '𑃱';
pub const DIGIT_TWO: char = '𑃲';
pub const DIGIT_THREE: char = '𑃳';
pub const DIGIT_FOUR: char = '𑃴';
pub const DIGIT_FIVE: char = '𑃵';
pub const DIGIT_SIX: char = '𑃶';
pub const DIGIT_SEVEN: char = '𑃷';
pub const DIGIT_EIGHT: char = '𑃸';
pub const DIGIT_NINE: char = '𑃹';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum SoraSompeng {
LetterSah,
LetterTah,
LetterBah,
LetterCah,
LetterDah,
LetterGah,
LetterMah,
LetterNgah,
LetterLah,
LetterNah,
LetterVah,
LetterPah,
LetterYah,
LetterRah,
LetterHah,
LetterKah,
LetterJah,
LetterNyah,
LetterAh,
LetterEeh,
LetterIh,
LetterUh,
LetterOh,
LetterEh,
LetterMae,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
}
impl Into<char> for SoraSompeng {
fn into(self) -> char {
use constants::*;
match self {
SoraSompeng::LetterSah => LETTER_SAH,
SoraSompeng::LetterTah => LETTER_TAH,
SoraSompeng::LetterBah => LETTER_BAH,
SoraSompeng::LetterCah => LETTER_CAH,
SoraSompeng::LetterDah => LETTER_DAH,
SoraSompeng::LetterGah => LETTER_GAH,
SoraSompeng::LetterMah => LETTER_MAH,
SoraSompeng::LetterNgah => LETTER_NGAH,
SoraSompeng::LetterLah => LETTER_LAH,
SoraSompeng::LetterNah => LETTER_NAH,
SoraSompeng::LetterVah => LETTER_VAH,
SoraSompeng::LetterPah => LETTER_PAH,
SoraSompeng::LetterYah => LETTER_YAH,
SoraSompeng::LetterRah => LETTER_RAH,
SoraSompeng::LetterHah => LETTER_HAH,
SoraSompeng::LetterKah => LETTER_KAH,
SoraSompeng::LetterJah => LETTER_JAH,
SoraSompeng::LetterNyah => LETTER_NYAH,
SoraSompeng::LetterAh => LETTER_AH,
SoraSompeng::LetterEeh => LETTER_EEH,
SoraSompeng::LetterIh => LETTER_IH,
SoraSompeng::LetterUh => LETTER_UH,
SoraSompeng::LetterOh => LETTER_OH,
SoraSompeng::LetterEh => LETTER_EH,
SoraSompeng::LetterMae => LETTER_MAE,
SoraSompeng::DigitZero => DIGIT_ZERO,
SoraSompeng::DigitOne => DIGIT_ONE,
SoraSompeng::DigitTwo => DIGIT_TWO,
SoraSompeng::DigitThree => DIGIT_THREE,
SoraSompeng::DigitFour => DIGIT_FOUR,
SoraSompeng::DigitFive => DIGIT_FIVE,
SoraSompeng::DigitSix => DIGIT_SIX,
SoraSompeng::DigitSeven => DIGIT_SEVEN,
SoraSompeng::DigitEight => DIGIT_EIGHT,
SoraSompeng::DigitNine => DIGIT_NINE,
}
}
}
impl std::convert::TryFrom<char> for SoraSompeng {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_SAH => Ok(SoraSompeng::LetterSah),
LETTER_TAH => Ok(SoraSompeng::LetterTah),
LETTER_BAH => Ok(SoraSompeng::LetterBah),
LETTER_CAH => Ok(SoraSompeng::LetterCah),
LETTER_DAH => Ok(SoraSompeng::LetterDah),
LETTER_GAH => Ok(SoraSompeng::LetterGah),
LETTER_MAH => Ok(SoraSompeng::LetterMah),
LETTER_NGAH => Ok(SoraSompeng::LetterNgah),
LETTER_LAH => Ok(SoraSompeng::LetterLah),
LETTER_NAH => Ok(SoraSompeng::LetterNah),
LETTER_VAH => Ok(SoraSompeng::LetterVah),
LETTER_PAH => Ok(SoraSompeng::LetterPah),
LETTER_YAH => Ok(SoraSompeng::LetterYah),
LETTER_RAH => Ok(SoraSompeng::LetterRah),
LETTER_HAH => Ok(SoraSompeng::LetterHah),
LETTER_KAH => Ok(SoraSompeng::LetterKah),
LETTER_JAH => Ok(SoraSompeng::LetterJah),
LETTER_NYAH => Ok(SoraSompeng::LetterNyah),
LETTER_AH => Ok(SoraSompeng::LetterAh),
LETTER_EEH => Ok(SoraSompeng::LetterEeh),
LETTER_IH => Ok(SoraSompeng::LetterIh),
LETTER_UH => Ok(SoraSompeng::LetterUh),
LETTER_OH => Ok(SoraSompeng::LetterOh),
LETTER_EH => Ok(SoraSompeng::LetterEh),
LETTER_MAE => Ok(SoraSompeng::LetterMae),
DIGIT_ZERO => Ok(SoraSompeng::DigitZero),
DIGIT_ONE => Ok(SoraSompeng::DigitOne),
DIGIT_TWO => Ok(SoraSompeng::DigitTwo),
DIGIT_THREE => Ok(SoraSompeng::DigitThree),
DIGIT_FOUR => Ok(SoraSompeng::DigitFour),
DIGIT_FIVE => Ok(SoraSompeng::DigitFive),
DIGIT_SIX => Ok(SoraSompeng::DigitSix),
DIGIT_SEVEN => Ok(SoraSompeng::DigitSeven),
DIGIT_EIGHT => Ok(SoraSompeng::DigitEight),
DIGIT_NINE => Ok(SoraSompeng::DigitNine),
_ => Err(()),
}
}
}
impl Into<u32> for SoraSompeng {
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 SoraSompeng {
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 SoraSompeng {
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 SoraSompeng {
pub fn new() -> Self {
SoraSompeng::LetterSah
}
pub fn name(&self) -> &str {
match self {
SoraSompeng::LetterSah => "sora sompeng letter sah",
SoraSompeng::LetterTah => "sora sompeng letter tah",
SoraSompeng::LetterBah => "sora sompeng letter bah",
SoraSompeng::LetterCah => "sora sompeng letter cah",
SoraSompeng::LetterDah => "sora sompeng letter dah",
SoraSompeng::LetterGah => "sora sompeng letter gah",
SoraSompeng::LetterMah => "sora sompeng letter mah",
SoraSompeng::LetterNgah => "sora sompeng letter ngah",
SoraSompeng::LetterLah => "sora sompeng letter lah",
SoraSompeng::LetterNah => "sora sompeng letter nah",
SoraSompeng::LetterVah => "sora sompeng letter vah",
SoraSompeng::LetterPah => "sora sompeng letter pah",
SoraSompeng::LetterYah => "sora sompeng letter yah",
SoraSompeng::LetterRah => "sora sompeng letter rah",
SoraSompeng::LetterHah => "sora sompeng letter hah",
SoraSompeng::LetterKah => "sora sompeng letter kah",
SoraSompeng::LetterJah => "sora sompeng letter jah",
SoraSompeng::LetterNyah => "sora sompeng letter nyah",
SoraSompeng::LetterAh => "sora sompeng letter ah",
SoraSompeng::LetterEeh => "sora sompeng letter eeh",
SoraSompeng::LetterIh => "sora sompeng letter ih",
SoraSompeng::LetterUh => "sora sompeng letter uh",
SoraSompeng::LetterOh => "sora sompeng letter oh",
SoraSompeng::LetterEh => "sora sompeng letter eh",
SoraSompeng::LetterMae => "sora sompeng letter mae",
SoraSompeng::DigitZero => "sora sompeng digit zero",
SoraSompeng::DigitOne => "sora sompeng digit one",
SoraSompeng::DigitTwo => "sora sompeng digit two",
SoraSompeng::DigitThree => "sora sompeng digit three",
SoraSompeng::DigitFour => "sora sompeng digit four",
SoraSompeng::DigitFive => "sora sompeng digit five",
SoraSompeng::DigitSix => "sora sompeng digit six",
SoraSompeng::DigitSeven => "sora sompeng digit seven",
SoraSompeng::DigitEight => "sora sompeng digit eight",
SoraSompeng::DigitNine => "sora sompeng digit nine",
}
}
}