mod constants {
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 = '꤉';
pub const LETTER_KA: char = 'ꤊ';
pub const LETTER_KHA: char = 'ꤋ';
pub const LETTER_GA: char = 'ꤌ';
pub const LETTER_NGA: char = 'ꤍ';
pub const LETTER_SA: char = 'ꤎ';
pub const LETTER_SHA: char = 'ꤏ';
pub const LETTER_ZA: char = 'ꤐ';
pub const LETTER_NYA: char = 'ꤑ';
pub const LETTER_TA: char = 'ꤒ';
pub const LETTER_HTA: char = 'ꤓ';
pub const LETTER_NA: char = 'ꤔ';
pub const LETTER_PA: char = 'ꤕ';
pub const LETTER_PHA: char = 'ꤖ';
pub const LETTER_MA: char = 'ꤗ';
pub const LETTER_DA: char = 'ꤘ';
pub const LETTER_BA: char = 'ꤙ';
pub const LETTER_RA: char = 'ꤚ';
pub const LETTER_YA: char = 'ꤛ';
pub const LETTER_LA: char = 'ꤜ';
pub const LETTER_WA: char = 'ꤝ';
pub const LETTER_THA: char = 'ꤞ';
pub const LETTER_HA: char = 'ꤟ';
pub const LETTER_VA: char = 'ꤠ';
pub const LETTER_CA: char = 'ꤡ';
pub const LETTER_A: char = 'ꤢ';
pub const LETTER_OE: char = 'ꤣ';
pub const LETTER_I: char = 'ꤤ';
pub const LETTER_OO: char = 'ꤥ';
pub const VOWEL_UE: char = 'ꤦ';
pub const VOWEL_E: char = 'ꤧ';
pub const VOWEL_U: char = 'ꤨ';
pub const VOWEL_EE: char = 'ꤩ';
pub const VOWEL_O: char = 'ꤪ';
pub const TONE_PLOPHU: char = '꤫';
pub const TONE_CALYA: char = '꤬';
pub const TONE_CALYA_PLOPHU: char = '꤭';
pub const SIGN_CWI: char = '꤮';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum KayahLi {
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
LetterKa,
LetterKha,
LetterGa,
LetterNga,
LetterSa,
LetterSha,
LetterZa,
LetterNya,
LetterTa,
LetterHta,
LetterNa,
LetterPa,
LetterPha,
LetterMa,
LetterDa,
LetterBa,
LetterRa,
LetterYa,
LetterLa,
LetterWa,
LetterTha,
LetterHa,
LetterVa,
LetterCa,
LetterA,
LetterOe,
LetterI,
LetterOo,
VowelUe,
VowelE,
VowelU,
VowelEe,
VowelO,
TonePlophu,
ToneCalya,
ToneCalyaPlophu,
SignCwi,
}
impl Into<char> for KayahLi {
fn into(self) -> char {
use constants::*;
match self {
KayahLi::DigitZero => DIGIT_ZERO,
KayahLi::DigitOne => DIGIT_ONE,
KayahLi::DigitTwo => DIGIT_TWO,
KayahLi::DigitThree => DIGIT_THREE,
KayahLi::DigitFour => DIGIT_FOUR,
KayahLi::DigitFive => DIGIT_FIVE,
KayahLi::DigitSix => DIGIT_SIX,
KayahLi::DigitSeven => DIGIT_SEVEN,
KayahLi::DigitEight => DIGIT_EIGHT,
KayahLi::DigitNine => DIGIT_NINE,
KayahLi::LetterKa => LETTER_KA,
KayahLi::LetterKha => LETTER_KHA,
KayahLi::LetterGa => LETTER_GA,
KayahLi::LetterNga => LETTER_NGA,
KayahLi::LetterSa => LETTER_SA,
KayahLi::LetterSha => LETTER_SHA,
KayahLi::LetterZa => LETTER_ZA,
KayahLi::LetterNya => LETTER_NYA,
KayahLi::LetterTa => LETTER_TA,
KayahLi::LetterHta => LETTER_HTA,
KayahLi::LetterNa => LETTER_NA,
KayahLi::LetterPa => LETTER_PA,
KayahLi::LetterPha => LETTER_PHA,
KayahLi::LetterMa => LETTER_MA,
KayahLi::LetterDa => LETTER_DA,
KayahLi::LetterBa => LETTER_BA,
KayahLi::LetterRa => LETTER_RA,
KayahLi::LetterYa => LETTER_YA,
KayahLi::LetterLa => LETTER_LA,
KayahLi::LetterWa => LETTER_WA,
KayahLi::LetterTha => LETTER_THA,
KayahLi::LetterHa => LETTER_HA,
KayahLi::LetterVa => LETTER_VA,
KayahLi::LetterCa => LETTER_CA,
KayahLi::LetterA => LETTER_A,
KayahLi::LetterOe => LETTER_OE,
KayahLi::LetterI => LETTER_I,
KayahLi::LetterOo => LETTER_OO,
KayahLi::VowelUe => VOWEL_UE,
KayahLi::VowelE => VOWEL_E,
KayahLi::VowelU => VOWEL_U,
KayahLi::VowelEe => VOWEL_EE,
KayahLi::VowelO => VOWEL_O,
KayahLi::TonePlophu => TONE_PLOPHU,
KayahLi::ToneCalya => TONE_CALYA,
KayahLi::ToneCalyaPlophu => TONE_CALYA_PLOPHU,
KayahLi::SignCwi => SIGN_CWI,
}
}
}
impl std::convert::TryFrom<char> for KayahLi {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
DIGIT_ZERO => Ok(KayahLi::DigitZero),
DIGIT_ONE => Ok(KayahLi::DigitOne),
DIGIT_TWO => Ok(KayahLi::DigitTwo),
DIGIT_THREE => Ok(KayahLi::DigitThree),
DIGIT_FOUR => Ok(KayahLi::DigitFour),
DIGIT_FIVE => Ok(KayahLi::DigitFive),
DIGIT_SIX => Ok(KayahLi::DigitSix),
DIGIT_SEVEN => Ok(KayahLi::DigitSeven),
DIGIT_EIGHT => Ok(KayahLi::DigitEight),
DIGIT_NINE => Ok(KayahLi::DigitNine),
LETTER_KA => Ok(KayahLi::LetterKa),
LETTER_KHA => Ok(KayahLi::LetterKha),
LETTER_GA => Ok(KayahLi::LetterGa),
LETTER_NGA => Ok(KayahLi::LetterNga),
LETTER_SA => Ok(KayahLi::LetterSa),
LETTER_SHA => Ok(KayahLi::LetterSha),
LETTER_ZA => Ok(KayahLi::LetterZa),
LETTER_NYA => Ok(KayahLi::LetterNya),
LETTER_TA => Ok(KayahLi::LetterTa),
LETTER_HTA => Ok(KayahLi::LetterHta),
LETTER_NA => Ok(KayahLi::LetterNa),
LETTER_PA => Ok(KayahLi::LetterPa),
LETTER_PHA => Ok(KayahLi::LetterPha),
LETTER_MA => Ok(KayahLi::LetterMa),
LETTER_DA => Ok(KayahLi::LetterDa),
LETTER_BA => Ok(KayahLi::LetterBa),
LETTER_RA => Ok(KayahLi::LetterRa),
LETTER_YA => Ok(KayahLi::LetterYa),
LETTER_LA => Ok(KayahLi::LetterLa),
LETTER_WA => Ok(KayahLi::LetterWa),
LETTER_THA => Ok(KayahLi::LetterTha),
LETTER_HA => Ok(KayahLi::LetterHa),
LETTER_VA => Ok(KayahLi::LetterVa),
LETTER_CA => Ok(KayahLi::LetterCa),
LETTER_A => Ok(KayahLi::LetterA),
LETTER_OE => Ok(KayahLi::LetterOe),
LETTER_I => Ok(KayahLi::LetterI),
LETTER_OO => Ok(KayahLi::LetterOo),
VOWEL_UE => Ok(KayahLi::VowelUe),
VOWEL_E => Ok(KayahLi::VowelE),
VOWEL_U => Ok(KayahLi::VowelU),
VOWEL_EE => Ok(KayahLi::VowelEe),
VOWEL_O => Ok(KayahLi::VowelO),
TONE_PLOPHU => Ok(KayahLi::TonePlophu),
TONE_CALYA => Ok(KayahLi::ToneCalya),
TONE_CALYA_PLOPHU => Ok(KayahLi::ToneCalyaPlophu),
SIGN_CWI => Ok(KayahLi::SignCwi),
_ => Err(()),
}
}
}
impl Into<u32> for KayahLi {
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 KayahLi {
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 KayahLi {
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 KayahLi {
pub fn new() -> Self {
KayahLi::DigitZero
}
pub fn name(&self) -> &str {
match self {
KayahLi::DigitZero => "kayah li digit zero",
KayahLi::DigitOne => "kayah li digit one",
KayahLi::DigitTwo => "kayah li digit two",
KayahLi::DigitThree => "kayah li digit three",
KayahLi::DigitFour => "kayah li digit four",
KayahLi::DigitFive => "kayah li digit five",
KayahLi::DigitSix => "kayah li digit six",
KayahLi::DigitSeven => "kayah li digit seven",
KayahLi::DigitEight => "kayah li digit eight",
KayahLi::DigitNine => "kayah li digit nine",
KayahLi::LetterKa => "kayah li letter ka",
KayahLi::LetterKha => "kayah li letter kha",
KayahLi::LetterGa => "kayah li letter ga",
KayahLi::LetterNga => "kayah li letter nga",
KayahLi::LetterSa => "kayah li letter sa",
KayahLi::LetterSha => "kayah li letter sha",
KayahLi::LetterZa => "kayah li letter za",
KayahLi::LetterNya => "kayah li letter nya",
KayahLi::LetterTa => "kayah li letter ta",
KayahLi::LetterHta => "kayah li letter hta",
KayahLi::LetterNa => "kayah li letter na",
KayahLi::LetterPa => "kayah li letter pa",
KayahLi::LetterPha => "kayah li letter pha",
KayahLi::LetterMa => "kayah li letter ma",
KayahLi::LetterDa => "kayah li letter da",
KayahLi::LetterBa => "kayah li letter ba",
KayahLi::LetterRa => "kayah li letter ra",
KayahLi::LetterYa => "kayah li letter ya",
KayahLi::LetterLa => "kayah li letter la",
KayahLi::LetterWa => "kayah li letter wa",
KayahLi::LetterTha => "kayah li letter tha",
KayahLi::LetterHa => "kayah li letter ha",
KayahLi::LetterVa => "kayah li letter va",
KayahLi::LetterCa => "kayah li letter ca",
KayahLi::LetterA => "kayah li letter a",
KayahLi::LetterOe => "kayah li letter oe",
KayahLi::LetterI => "kayah li letter i",
KayahLi::LetterOo => "kayah li letter oo",
KayahLi::VowelUe => "kayah li vowel ue",
KayahLi::VowelE => "kayah li vowel e",
KayahLi::VowelU => "kayah li vowel u",
KayahLi::VowelEe => "kayah li vowel ee",
KayahLi::VowelO => "kayah li vowel o",
KayahLi::TonePlophu => "kayah li tone plophu",
KayahLi::ToneCalya => "kayah li tone calya",
KayahLi::ToneCalyaPlophu => "kayah li tone calya plophu",
KayahLi::SignCwi => "kayah li sign cwi",
}
}
}