mod constants {
pub const LETTER_AA: char = '𞋀';
pub const LETTER_A: char = '𞋁';
pub const LETTER_BA: char = '𞋂';
pub const LETTER_CA: char = '𞋃';
pub const LETTER_DA: char = '𞋄';
pub const LETTER_GA: char = '𞋅';
pub const LETTER_YA: char = '𞋆';
pub const LETTER_PHA: char = '𞋇';
pub const LETTER_LA: char = '𞋈';
pub const LETTER_NA: char = '𞋉';
pub const LETTER_PA: char = '𞋊';
pub const LETTER_TA: char = '𞋋';
pub const LETTER_THA: char = '𞋌';
pub const LETTER_FA: char = '𞋍';
pub const LETTER_SA: char = '𞋎';
pub const LETTER_SHA: char = '𞋏';
pub const LETTER_JA: char = '𞋐';
pub const LETTER_ZA: char = '𞋑';
pub const LETTER_WA: char = '𞋒';
pub const LETTER_VA: char = '𞋓';
pub const LETTER_KA: char = '𞋔';
pub const LETTER_O: char = '𞋕';
pub const LETTER_AU: char = '𞋖';
pub const LETTER_RA: char = '𞋗';
pub const LETTER_MA: char = '𞋘';
pub const LETTER_KHA: char = '𞋙';
pub const LETTER_HA: char = '𞋚';
pub const LETTER_E: char = '𞋛';
pub const LETTER_I: char = '𞋜';
pub const LETTER_NGA: char = '𞋝';
pub const LETTER_U: char = '𞋞';
pub const LETTER_LLHA: char = '𞋟';
pub const LETTER_TSA: char = '𞋠';
pub const LETTER_TRA: char = '𞋡';
pub const LETTER_ONG: char = '𞋢';
pub const LETTER_AANG: char = '𞋣';
pub const LETTER_ANG: char = '𞋤';
pub const LETTER_ING: char = '𞋥';
pub const LETTER_ON: char = '𞋦';
pub const LETTER_EN: char = '𞋧';
pub const LETTER_AAN: char = '𞋨';
pub const LETTER_NYA: char = '𞋩';
pub const LETTER_UEN: char = '𞋪';
pub const LETTER_YIH: char = '𞋫';
pub const TONE_TUP: char = '𞋬';
pub const TONE_TUPNI: char = '𞋭';
pub const TONE_KOI: char = '𞋮';
pub const TONE_KOINI: 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 Wancho {
LetterAa,
LetterA,
LetterBa,
LetterCa,
LetterDa,
LetterGa,
LetterYa,
LetterPha,
LetterLa,
LetterNa,
LetterPa,
LetterTa,
LetterTha,
LetterFa,
LetterSa,
LetterSha,
LetterJa,
LetterZa,
LetterWa,
LetterVa,
LetterKa,
LetterO,
LetterAu,
LetterRa,
LetterMa,
LetterKha,
LetterHa,
LetterE,
LetterI,
LetterNga,
LetterU,
LetterLlha,
LetterTsa,
LetterTra,
LetterOng,
LetterAang,
LetterAng,
LetterIng,
LetterOn,
LetterEn,
LetterAan,
LetterNya,
LetterUen,
LetterYih,
ToneTup,
ToneTupni,
ToneKoi,
ToneKoini,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
}
impl Into<char> for Wancho {
fn into(self) -> char {
use constants::*;
match self {
Wancho::LetterAa => LETTER_AA,
Wancho::LetterA => LETTER_A,
Wancho::LetterBa => LETTER_BA,
Wancho::LetterCa => LETTER_CA,
Wancho::LetterDa => LETTER_DA,
Wancho::LetterGa => LETTER_GA,
Wancho::LetterYa => LETTER_YA,
Wancho::LetterPha => LETTER_PHA,
Wancho::LetterLa => LETTER_LA,
Wancho::LetterNa => LETTER_NA,
Wancho::LetterPa => LETTER_PA,
Wancho::LetterTa => LETTER_TA,
Wancho::LetterTha => LETTER_THA,
Wancho::LetterFa => LETTER_FA,
Wancho::LetterSa => LETTER_SA,
Wancho::LetterSha => LETTER_SHA,
Wancho::LetterJa => LETTER_JA,
Wancho::LetterZa => LETTER_ZA,
Wancho::LetterWa => LETTER_WA,
Wancho::LetterVa => LETTER_VA,
Wancho::LetterKa => LETTER_KA,
Wancho::LetterO => LETTER_O,
Wancho::LetterAu => LETTER_AU,
Wancho::LetterRa => LETTER_RA,
Wancho::LetterMa => LETTER_MA,
Wancho::LetterKha => LETTER_KHA,
Wancho::LetterHa => LETTER_HA,
Wancho::LetterE => LETTER_E,
Wancho::LetterI => LETTER_I,
Wancho::LetterNga => LETTER_NGA,
Wancho::LetterU => LETTER_U,
Wancho::LetterLlha => LETTER_LLHA,
Wancho::LetterTsa => LETTER_TSA,
Wancho::LetterTra => LETTER_TRA,
Wancho::LetterOng => LETTER_ONG,
Wancho::LetterAang => LETTER_AANG,
Wancho::LetterAng => LETTER_ANG,
Wancho::LetterIng => LETTER_ING,
Wancho::LetterOn => LETTER_ON,
Wancho::LetterEn => LETTER_EN,
Wancho::LetterAan => LETTER_AAN,
Wancho::LetterNya => LETTER_NYA,
Wancho::LetterUen => LETTER_UEN,
Wancho::LetterYih => LETTER_YIH,
Wancho::ToneTup => TONE_TUP,
Wancho::ToneTupni => TONE_TUPNI,
Wancho::ToneKoi => TONE_KOI,
Wancho::ToneKoini => TONE_KOINI,
Wancho::DigitZero => DIGIT_ZERO,
Wancho::DigitOne => DIGIT_ONE,
Wancho::DigitTwo => DIGIT_TWO,
Wancho::DigitThree => DIGIT_THREE,
Wancho::DigitFour => DIGIT_FOUR,
Wancho::DigitFive => DIGIT_FIVE,
Wancho::DigitSix => DIGIT_SIX,
Wancho::DigitSeven => DIGIT_SEVEN,
Wancho::DigitEight => DIGIT_EIGHT,
Wancho::DigitNine => DIGIT_NINE,
}
}
}
impl std::convert::TryFrom<char> for Wancho {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_AA => Ok(Wancho::LetterAa),
LETTER_A => Ok(Wancho::LetterA),
LETTER_BA => Ok(Wancho::LetterBa),
LETTER_CA => Ok(Wancho::LetterCa),
LETTER_DA => Ok(Wancho::LetterDa),
LETTER_GA => Ok(Wancho::LetterGa),
LETTER_YA => Ok(Wancho::LetterYa),
LETTER_PHA => Ok(Wancho::LetterPha),
LETTER_LA => Ok(Wancho::LetterLa),
LETTER_NA => Ok(Wancho::LetterNa),
LETTER_PA => Ok(Wancho::LetterPa),
LETTER_TA => Ok(Wancho::LetterTa),
LETTER_THA => Ok(Wancho::LetterTha),
LETTER_FA => Ok(Wancho::LetterFa),
LETTER_SA => Ok(Wancho::LetterSa),
LETTER_SHA => Ok(Wancho::LetterSha),
LETTER_JA => Ok(Wancho::LetterJa),
LETTER_ZA => Ok(Wancho::LetterZa),
LETTER_WA => Ok(Wancho::LetterWa),
LETTER_VA => Ok(Wancho::LetterVa),
LETTER_KA => Ok(Wancho::LetterKa),
LETTER_O => Ok(Wancho::LetterO),
LETTER_AU => Ok(Wancho::LetterAu),
LETTER_RA => Ok(Wancho::LetterRa),
LETTER_MA => Ok(Wancho::LetterMa),
LETTER_KHA => Ok(Wancho::LetterKha),
LETTER_HA => Ok(Wancho::LetterHa),
LETTER_E => Ok(Wancho::LetterE),
LETTER_I => Ok(Wancho::LetterI),
LETTER_NGA => Ok(Wancho::LetterNga),
LETTER_U => Ok(Wancho::LetterU),
LETTER_LLHA => Ok(Wancho::LetterLlha),
LETTER_TSA => Ok(Wancho::LetterTsa),
LETTER_TRA => Ok(Wancho::LetterTra),
LETTER_ONG => Ok(Wancho::LetterOng),
LETTER_AANG => Ok(Wancho::LetterAang),
LETTER_ANG => Ok(Wancho::LetterAng),
LETTER_ING => Ok(Wancho::LetterIng),
LETTER_ON => Ok(Wancho::LetterOn),
LETTER_EN => Ok(Wancho::LetterEn),
LETTER_AAN => Ok(Wancho::LetterAan),
LETTER_NYA => Ok(Wancho::LetterNya),
LETTER_UEN => Ok(Wancho::LetterUen),
LETTER_YIH => Ok(Wancho::LetterYih),
TONE_TUP => Ok(Wancho::ToneTup),
TONE_TUPNI => Ok(Wancho::ToneTupni),
TONE_KOI => Ok(Wancho::ToneKoi),
TONE_KOINI => Ok(Wancho::ToneKoini),
DIGIT_ZERO => Ok(Wancho::DigitZero),
DIGIT_ONE => Ok(Wancho::DigitOne),
DIGIT_TWO => Ok(Wancho::DigitTwo),
DIGIT_THREE => Ok(Wancho::DigitThree),
DIGIT_FOUR => Ok(Wancho::DigitFour),
DIGIT_FIVE => Ok(Wancho::DigitFive),
DIGIT_SIX => Ok(Wancho::DigitSix),
DIGIT_SEVEN => Ok(Wancho::DigitSeven),
DIGIT_EIGHT => Ok(Wancho::DigitEight),
DIGIT_NINE => Ok(Wancho::DigitNine),
_ => Err(()),
}
}
}
impl Into<u32> for Wancho {
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 Wancho {
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 Wancho {
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 Wancho {
pub fn new() -> Self {
Wancho::LetterAa
}
pub fn name(&self) -> &str {
match self {
Wancho::LetterAa => "wancho letter aa",
Wancho::LetterA => "wancho letter a",
Wancho::LetterBa => "wancho letter ba",
Wancho::LetterCa => "wancho letter ca",
Wancho::LetterDa => "wancho letter da",
Wancho::LetterGa => "wancho letter ga",
Wancho::LetterYa => "wancho letter ya",
Wancho::LetterPha => "wancho letter pha",
Wancho::LetterLa => "wancho letter la",
Wancho::LetterNa => "wancho letter na",
Wancho::LetterPa => "wancho letter pa",
Wancho::LetterTa => "wancho letter ta",
Wancho::LetterTha => "wancho letter tha",
Wancho::LetterFa => "wancho letter fa",
Wancho::LetterSa => "wancho letter sa",
Wancho::LetterSha => "wancho letter sha",
Wancho::LetterJa => "wancho letter ja",
Wancho::LetterZa => "wancho letter za",
Wancho::LetterWa => "wancho letter wa",
Wancho::LetterVa => "wancho letter va",
Wancho::LetterKa => "wancho letter ka",
Wancho::LetterO => "wancho letter o",
Wancho::LetterAu => "wancho letter au",
Wancho::LetterRa => "wancho letter ra",
Wancho::LetterMa => "wancho letter ma",
Wancho::LetterKha => "wancho letter kha",
Wancho::LetterHa => "wancho letter ha",
Wancho::LetterE => "wancho letter e",
Wancho::LetterI => "wancho letter i",
Wancho::LetterNga => "wancho letter nga",
Wancho::LetterU => "wancho letter u",
Wancho::LetterLlha => "wancho letter llha",
Wancho::LetterTsa => "wancho letter tsa",
Wancho::LetterTra => "wancho letter tra",
Wancho::LetterOng => "wancho letter ong",
Wancho::LetterAang => "wancho letter aang",
Wancho::LetterAng => "wancho letter ang",
Wancho::LetterIng => "wancho letter ing",
Wancho::LetterOn => "wancho letter on",
Wancho::LetterEn => "wancho letter en",
Wancho::LetterAan => "wancho letter aan",
Wancho::LetterNya => "wancho letter nya",
Wancho::LetterUen => "wancho letter uen",
Wancho::LetterYih => "wancho letter yih",
Wancho::ToneTup => "wancho tone tup",
Wancho::ToneTupni => "wancho tone tupni",
Wancho::ToneKoi => "wancho tone koi",
Wancho::ToneKoini => "wancho tone koini",
Wancho::DigitZero => "wancho digit zero",
Wancho::DigitOne => "wancho digit one",
Wancho::DigitTwo => "wancho digit two",
Wancho::DigitThree => "wancho digit three",
Wancho::DigitFour => "wancho digit four",
Wancho::DigitFive => "wancho digit five",
Wancho::DigitSix => "wancho digit six",
Wancho::DigitSeven => "wancho digit seven",
Wancho::DigitEight => "wancho digit eight",
Wancho::DigitNine => "wancho digit nine",
}
}
}