mod constants {
pub const LETTER_BA: char = 'ꓐ';
pub const LETTER_PA: char = 'ꓑ';
pub const LETTER_PHA: char = 'ꓒ';
pub const LETTER_DA: char = 'ꓓ';
pub const LETTER_TA: char = 'ꓔ';
pub const LETTER_THA: char = 'ꓕ';
pub const LETTER_GA: char = 'ꓖ';
pub const LETTER_KA: char = 'ꓗ';
pub const LETTER_KHA: char = 'ꓘ';
pub const LETTER_JA: char = 'ꓙ';
pub const LETTER_CA: char = 'ꓚ';
pub const LETTER_CHA: char = 'ꓛ';
pub const LETTER_DZA: char = 'ꓜ';
pub const LETTER_TSA: char = 'ꓝ';
pub const LETTER_TSHA: char = 'ꓞ';
pub const LETTER_MA: char = 'ꓟ';
pub const LETTER_NA: char = 'ꓠ';
pub const LETTER_LA: char = 'ꓡ';
pub const LETTER_SA: char = 'ꓢ';
pub const LETTER_ZHA: char = 'ꓣ';
pub const LETTER_ZA: char = 'ꓤ';
pub const LETTER_NGA: char = 'ꓥ';
pub const LETTER_HA: char = 'ꓦ';
pub const LETTER_XA: char = 'ꓧ';
pub const LETTER_HHA: char = 'ꓨ';
pub const LETTER_FA: char = 'ꓩ';
pub const LETTER_WA: char = 'ꓪ';
pub const LETTER_SHA: char = 'ꓫ';
pub const LETTER_YA: char = 'ꓬ';
pub const LETTER_GHA: char = 'ꓭ';
pub const LETTER_A: char = 'ꓮ';
pub const LETTER_AE: char = 'ꓯ';
pub const LETTER_E: char = 'ꓰ';
pub const LETTER_EU: char = 'ꓱ';
pub const LETTER_I: char = 'ꓲ';
pub const LETTER_O: char = 'ꓳ';
pub const LETTER_U: char = 'ꓴ';
pub const LETTER_UE: char = 'ꓵ';
pub const LETTER_UH: char = 'ꓶ';
pub const LETTER_OE: char = 'ꓷ';
pub const LETTER_TONE_MYA_TI: char = 'ꓸ';
pub const LETTER_TONE_NA_PO: char = 'ꓹ';
pub const LETTER_TONE_MYA_CYA: char = 'ꓺ';
pub const LETTER_TONE_MYA_BO: char = 'ꓻ';
pub const LETTER_TONE_MYA_NA: char = 'ꓼ';
pub const LETTER_TONE_MYA_JEU: char = 'ꓽ';
pub const PUNCTUATION_COMMA: char = '꓾';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Lisu {
LetterBa,
LetterPa,
LetterPha,
LetterDa,
LetterTa,
LetterTha,
LetterGa,
LetterKa,
LetterKha,
LetterJa,
LetterCa,
LetterCha,
LetterDza,
LetterTsa,
LetterTsha,
LetterMa,
LetterNa,
LetterLa,
LetterSa,
LetterZha,
LetterZa,
LetterNga,
LetterHa,
LetterXa,
LetterHha,
LetterFa,
LetterWa,
LetterSha,
LetterYa,
LetterGha,
LetterA,
LetterAe,
LetterE,
LetterEu,
LetterI,
LetterO,
LetterU,
LetterUe,
LetterUh,
LetterOe,
LetterToneMyaTi,
LetterToneNaPo,
LetterToneMyaCya,
LetterToneMyaBo,
LetterToneMyaNa,
LetterToneMyaJeu,
PunctuationComma,
}
impl Into<char> for Lisu {
fn into(self) -> char {
use constants::*;
match self {
Lisu::LetterBa => LETTER_BA,
Lisu::LetterPa => LETTER_PA,
Lisu::LetterPha => LETTER_PHA,
Lisu::LetterDa => LETTER_DA,
Lisu::LetterTa => LETTER_TA,
Lisu::LetterTha => LETTER_THA,
Lisu::LetterGa => LETTER_GA,
Lisu::LetterKa => LETTER_KA,
Lisu::LetterKha => LETTER_KHA,
Lisu::LetterJa => LETTER_JA,
Lisu::LetterCa => LETTER_CA,
Lisu::LetterCha => LETTER_CHA,
Lisu::LetterDza => LETTER_DZA,
Lisu::LetterTsa => LETTER_TSA,
Lisu::LetterTsha => LETTER_TSHA,
Lisu::LetterMa => LETTER_MA,
Lisu::LetterNa => LETTER_NA,
Lisu::LetterLa => LETTER_LA,
Lisu::LetterSa => LETTER_SA,
Lisu::LetterZha => LETTER_ZHA,
Lisu::LetterZa => LETTER_ZA,
Lisu::LetterNga => LETTER_NGA,
Lisu::LetterHa => LETTER_HA,
Lisu::LetterXa => LETTER_XA,
Lisu::LetterHha => LETTER_HHA,
Lisu::LetterFa => LETTER_FA,
Lisu::LetterWa => LETTER_WA,
Lisu::LetterSha => LETTER_SHA,
Lisu::LetterYa => LETTER_YA,
Lisu::LetterGha => LETTER_GHA,
Lisu::LetterA => LETTER_A,
Lisu::LetterAe => LETTER_AE,
Lisu::LetterE => LETTER_E,
Lisu::LetterEu => LETTER_EU,
Lisu::LetterI => LETTER_I,
Lisu::LetterO => LETTER_O,
Lisu::LetterU => LETTER_U,
Lisu::LetterUe => LETTER_UE,
Lisu::LetterUh => LETTER_UH,
Lisu::LetterOe => LETTER_OE,
Lisu::LetterToneMyaTi => LETTER_TONE_MYA_TI,
Lisu::LetterToneNaPo => LETTER_TONE_NA_PO,
Lisu::LetterToneMyaCya => LETTER_TONE_MYA_CYA,
Lisu::LetterToneMyaBo => LETTER_TONE_MYA_BO,
Lisu::LetterToneMyaNa => LETTER_TONE_MYA_NA,
Lisu::LetterToneMyaJeu => LETTER_TONE_MYA_JEU,
Lisu::PunctuationComma => PUNCTUATION_COMMA,
}
}
}
impl std::convert::TryFrom<char> for Lisu {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_BA => Ok(Lisu::LetterBa),
LETTER_PA => Ok(Lisu::LetterPa),
LETTER_PHA => Ok(Lisu::LetterPha),
LETTER_DA => Ok(Lisu::LetterDa),
LETTER_TA => Ok(Lisu::LetterTa),
LETTER_THA => Ok(Lisu::LetterTha),
LETTER_GA => Ok(Lisu::LetterGa),
LETTER_KA => Ok(Lisu::LetterKa),
LETTER_KHA => Ok(Lisu::LetterKha),
LETTER_JA => Ok(Lisu::LetterJa),
LETTER_CA => Ok(Lisu::LetterCa),
LETTER_CHA => Ok(Lisu::LetterCha),
LETTER_DZA => Ok(Lisu::LetterDza),
LETTER_TSA => Ok(Lisu::LetterTsa),
LETTER_TSHA => Ok(Lisu::LetterTsha),
LETTER_MA => Ok(Lisu::LetterMa),
LETTER_NA => Ok(Lisu::LetterNa),
LETTER_LA => Ok(Lisu::LetterLa),
LETTER_SA => Ok(Lisu::LetterSa),
LETTER_ZHA => Ok(Lisu::LetterZha),
LETTER_ZA => Ok(Lisu::LetterZa),
LETTER_NGA => Ok(Lisu::LetterNga),
LETTER_HA => Ok(Lisu::LetterHa),
LETTER_XA => Ok(Lisu::LetterXa),
LETTER_HHA => Ok(Lisu::LetterHha),
LETTER_FA => Ok(Lisu::LetterFa),
LETTER_WA => Ok(Lisu::LetterWa),
LETTER_SHA => Ok(Lisu::LetterSha),
LETTER_YA => Ok(Lisu::LetterYa),
LETTER_GHA => Ok(Lisu::LetterGha),
LETTER_A => Ok(Lisu::LetterA),
LETTER_AE => Ok(Lisu::LetterAe),
LETTER_E => Ok(Lisu::LetterE),
LETTER_EU => Ok(Lisu::LetterEu),
LETTER_I => Ok(Lisu::LetterI),
LETTER_O => Ok(Lisu::LetterO),
LETTER_U => Ok(Lisu::LetterU),
LETTER_UE => Ok(Lisu::LetterUe),
LETTER_UH => Ok(Lisu::LetterUh),
LETTER_OE => Ok(Lisu::LetterOe),
LETTER_TONE_MYA_TI => Ok(Lisu::LetterToneMyaTi),
LETTER_TONE_NA_PO => Ok(Lisu::LetterToneNaPo),
LETTER_TONE_MYA_CYA => Ok(Lisu::LetterToneMyaCya),
LETTER_TONE_MYA_BO => Ok(Lisu::LetterToneMyaBo),
LETTER_TONE_MYA_NA => Ok(Lisu::LetterToneMyaNa),
LETTER_TONE_MYA_JEU => Ok(Lisu::LetterToneMyaJeu),
PUNCTUATION_COMMA => Ok(Lisu::PunctuationComma),
_ => Err(()),
}
}
}
impl Into<u32> for Lisu {
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 Lisu {
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 Lisu {
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 Lisu {
pub fn new() -> Self {
Lisu::LetterBa
}
pub fn name(&self) -> &str {
match self {
Lisu::LetterBa => "lisu letter ba",
Lisu::LetterPa => "lisu letter pa",
Lisu::LetterPha => "lisu letter pha",
Lisu::LetterDa => "lisu letter da",
Lisu::LetterTa => "lisu letter ta",
Lisu::LetterTha => "lisu letter tha",
Lisu::LetterGa => "lisu letter ga",
Lisu::LetterKa => "lisu letter ka",
Lisu::LetterKha => "lisu letter kha",
Lisu::LetterJa => "lisu letter ja",
Lisu::LetterCa => "lisu letter ca",
Lisu::LetterCha => "lisu letter cha",
Lisu::LetterDza => "lisu letter dza",
Lisu::LetterTsa => "lisu letter tsa",
Lisu::LetterTsha => "lisu letter tsha",
Lisu::LetterMa => "lisu letter ma",
Lisu::LetterNa => "lisu letter na",
Lisu::LetterLa => "lisu letter la",
Lisu::LetterSa => "lisu letter sa",
Lisu::LetterZha => "lisu letter zha",
Lisu::LetterZa => "lisu letter za",
Lisu::LetterNga => "lisu letter nga",
Lisu::LetterHa => "lisu letter ha",
Lisu::LetterXa => "lisu letter xa",
Lisu::LetterHha => "lisu letter hha",
Lisu::LetterFa => "lisu letter fa",
Lisu::LetterWa => "lisu letter wa",
Lisu::LetterSha => "lisu letter sha",
Lisu::LetterYa => "lisu letter ya",
Lisu::LetterGha => "lisu letter gha",
Lisu::LetterA => "lisu letter a",
Lisu::LetterAe => "lisu letter ae",
Lisu::LetterE => "lisu letter e",
Lisu::LetterEu => "lisu letter eu",
Lisu::LetterI => "lisu letter i",
Lisu::LetterO => "lisu letter o",
Lisu::LetterU => "lisu letter u",
Lisu::LetterUe => "lisu letter ue",
Lisu::LetterUh => "lisu letter uh",
Lisu::LetterOe => "lisu letter oe",
Lisu::LetterToneMyaTi => "lisu letter tone mya ti",
Lisu::LetterToneNaPo => "lisu letter tone na po",
Lisu::LetterToneMyaCya => "lisu letter tone mya cya",
Lisu::LetterToneMyaBo => "lisu letter tone mya bo",
Lisu::LetterToneMyaNa => "lisu letter tone mya na",
Lisu::LetterToneMyaJeu => "lisu letter tone mya jeu",
Lisu::PunctuationComma => "lisu punctuation comma",
}
}
}