#[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 {
match self {
KayahLi::DigitZero => '꤀',
KayahLi::DigitOne => '꤁',
KayahLi::DigitTwo => '꤂',
KayahLi::DigitThree => '꤃',
KayahLi::DigitFour => '꤄',
KayahLi::DigitFive => '꤅',
KayahLi::DigitSix => '꤆',
KayahLi::DigitSeven => '꤇',
KayahLi::DigitEight => '꤈',
KayahLi::DigitNine => '꤉',
KayahLi::LetterKa => 'ꤊ',
KayahLi::LetterKha => 'ꤋ',
KayahLi::LetterGa => 'ꤌ',
KayahLi::LetterNga => 'ꤍ',
KayahLi::LetterSa => 'ꤎ',
KayahLi::LetterSha => 'ꤏ',
KayahLi::LetterZa => 'ꤐ',
KayahLi::LetterNya => 'ꤑ',
KayahLi::LetterTa => 'ꤒ',
KayahLi::LetterHta => 'ꤓ',
KayahLi::LetterNa => 'ꤔ',
KayahLi::LetterPa => 'ꤕ',
KayahLi::LetterPha => 'ꤖ',
KayahLi::LetterMa => 'ꤗ',
KayahLi::LetterDa => 'ꤘ',
KayahLi::LetterBa => 'ꤙ',
KayahLi::LetterRa => 'ꤚ',
KayahLi::LetterYa => 'ꤛ',
KayahLi::LetterLa => 'ꤜ',
KayahLi::LetterWa => 'ꤝ',
KayahLi::LetterTha => 'ꤞ',
KayahLi::LetterHa => 'ꤟ',
KayahLi::LetterVa => 'ꤠ',
KayahLi::LetterCa => 'ꤡ',
KayahLi::LetterA => 'ꤢ',
KayahLi::LetterOe => 'ꤣ',
KayahLi::LetterI => 'ꤤ',
KayahLi::LetterOo => 'ꤥ',
KayahLi::VowelUe => 'ꤦ',
KayahLi::VowelE => 'ꤧ',
KayahLi::VowelU => 'ꤨ',
KayahLi::VowelEe => 'ꤩ',
KayahLi::VowelO => 'ꤪ',
KayahLi::TonePlophu => '꤫',
KayahLi::ToneCalya => '꤬',
KayahLi::ToneCalyaPlophu => '꤭',
KayahLi::SignCwi => '꤮',
}
}
}
impl std::convert::TryFrom<char> for KayahLi {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'꤀' => Ok(KayahLi::DigitZero),
'꤁' => Ok(KayahLi::DigitOne),
'꤂' => Ok(KayahLi::DigitTwo),
'꤃' => Ok(KayahLi::DigitThree),
'꤄' => Ok(KayahLi::DigitFour),
'꤅' => Ok(KayahLi::DigitFive),
'꤆' => Ok(KayahLi::DigitSix),
'꤇' => Ok(KayahLi::DigitSeven),
'꤈' => Ok(KayahLi::DigitEight),
'꤉' => Ok(KayahLi::DigitNine),
'ꤊ' => Ok(KayahLi::LetterKa),
'ꤋ' => Ok(KayahLi::LetterKha),
'ꤌ' => Ok(KayahLi::LetterGa),
'ꤍ' => Ok(KayahLi::LetterNga),
'ꤎ' => Ok(KayahLi::LetterSa),
'ꤏ' => Ok(KayahLi::LetterSha),
'ꤐ' => Ok(KayahLi::LetterZa),
'ꤑ' => Ok(KayahLi::LetterNya),
'ꤒ' => Ok(KayahLi::LetterTa),
'ꤓ' => Ok(KayahLi::LetterHta),
'ꤔ' => Ok(KayahLi::LetterNa),
'ꤕ' => Ok(KayahLi::LetterPa),
'ꤖ' => Ok(KayahLi::LetterPha),
'ꤗ' => Ok(KayahLi::LetterMa),
'ꤘ' => Ok(KayahLi::LetterDa),
'ꤙ' => Ok(KayahLi::LetterBa),
'ꤚ' => Ok(KayahLi::LetterRa),
'ꤛ' => Ok(KayahLi::LetterYa),
'ꤜ' => Ok(KayahLi::LetterLa),
'ꤝ' => Ok(KayahLi::LetterWa),
'ꤞ' => Ok(KayahLi::LetterTha),
'ꤟ' => Ok(KayahLi::LetterHa),
'ꤠ' => Ok(KayahLi::LetterVa),
'ꤡ' => Ok(KayahLi::LetterCa),
'ꤢ' => Ok(KayahLi::LetterA),
'ꤣ' => Ok(KayahLi::LetterOe),
'ꤤ' => Ok(KayahLi::LetterI),
'ꤥ' => Ok(KayahLi::LetterOo),
'ꤦ' => Ok(KayahLi::VowelUe),
'ꤧ' => Ok(KayahLi::VowelE),
'ꤨ' => Ok(KayahLi::VowelU),
'ꤩ' => Ok(KayahLi::VowelEe),
'ꤪ' => Ok(KayahLi::VowelO),
'꤫' => Ok(KayahLi::TonePlophu),
'꤬' => Ok(KayahLi::ToneCalya),
'꤭' => Ok(KayahLi::ToneCalyaPlophu),
'꤮' => 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) -> String {
let s = std::format!("KayahLi{:#?}", self);
string_morph::to_sentence_case(&s)
}
}