#[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 {
match self {
Wancho::LetterAa => '𞋀',
Wancho::LetterA => '𞋁',
Wancho::LetterBa => '𞋂',
Wancho::LetterCa => '𞋃',
Wancho::LetterDa => '𞋄',
Wancho::LetterGa => '𞋅',
Wancho::LetterYa => '𞋆',
Wancho::LetterPha => '𞋇',
Wancho::LetterLa => '𞋈',
Wancho::LetterNa => '𞋉',
Wancho::LetterPa => '𞋊',
Wancho::LetterTa => '𞋋',
Wancho::LetterTha => '𞋌',
Wancho::LetterFa => '𞋍',
Wancho::LetterSa => '𞋎',
Wancho::LetterSha => '𞋏',
Wancho::LetterJa => '𞋐',
Wancho::LetterZa => '𞋑',
Wancho::LetterWa => '𞋒',
Wancho::LetterVa => '𞋓',
Wancho::LetterKa => '𞋔',
Wancho::LetterO => '𞋕',
Wancho::LetterAu => '𞋖',
Wancho::LetterRa => '𞋗',
Wancho::LetterMa => '𞋘',
Wancho::LetterKha => '𞋙',
Wancho::LetterHa => '𞋚',
Wancho::LetterE => '𞋛',
Wancho::LetterI => '𞋜',
Wancho::LetterNga => '𞋝',
Wancho::LetterU => '𞋞',
Wancho::LetterLlha => '𞋟',
Wancho::LetterTsa => '𞋠',
Wancho::LetterTra => '𞋡',
Wancho::LetterOng => '𞋢',
Wancho::LetterAang => '𞋣',
Wancho::LetterAng => '𞋤',
Wancho::LetterIng => '𞋥',
Wancho::LetterOn => '𞋦',
Wancho::LetterEn => '𞋧',
Wancho::LetterAan => '𞋨',
Wancho::LetterNya => '𞋩',
Wancho::LetterUen => '𞋪',
Wancho::LetterYih => '𞋫',
Wancho::ToneTup => '𞋬',
Wancho::ToneTupni => '𞋭',
Wancho::ToneKoi => '𞋮',
Wancho::ToneKoini => '𞋯',
Wancho::DigitZero => '𞋰',
Wancho::DigitOne => '𞋱',
Wancho::DigitTwo => '𞋲',
Wancho::DigitThree => '𞋳',
Wancho::DigitFour => '𞋴',
Wancho::DigitFive => '𞋵',
Wancho::DigitSix => '𞋶',
Wancho::DigitSeven => '𞋷',
Wancho::DigitEight => '𞋸',
Wancho::DigitNine => '𞋹',
}
}
}
impl std::convert::TryFrom<char> for Wancho {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𞋀' => Ok(Wancho::LetterAa),
'𞋁' => Ok(Wancho::LetterA),
'𞋂' => Ok(Wancho::LetterBa),
'𞋃' => Ok(Wancho::LetterCa),
'𞋄' => Ok(Wancho::LetterDa),
'𞋅' => Ok(Wancho::LetterGa),
'𞋆' => Ok(Wancho::LetterYa),
'𞋇' => Ok(Wancho::LetterPha),
'𞋈' => Ok(Wancho::LetterLa),
'𞋉' => Ok(Wancho::LetterNa),
'𞋊' => Ok(Wancho::LetterPa),
'𞋋' => Ok(Wancho::LetterTa),
'𞋌' => Ok(Wancho::LetterTha),
'𞋍' => Ok(Wancho::LetterFa),
'𞋎' => Ok(Wancho::LetterSa),
'𞋏' => Ok(Wancho::LetterSha),
'𞋐' => Ok(Wancho::LetterJa),
'𞋑' => Ok(Wancho::LetterZa),
'𞋒' => Ok(Wancho::LetterWa),
'𞋓' => Ok(Wancho::LetterVa),
'𞋔' => Ok(Wancho::LetterKa),
'𞋕' => Ok(Wancho::LetterO),
'𞋖' => Ok(Wancho::LetterAu),
'𞋗' => Ok(Wancho::LetterRa),
'𞋘' => Ok(Wancho::LetterMa),
'𞋙' => Ok(Wancho::LetterKha),
'𞋚' => Ok(Wancho::LetterHa),
'𞋛' => Ok(Wancho::LetterE),
'𞋜' => Ok(Wancho::LetterI),
'𞋝' => Ok(Wancho::LetterNga),
'𞋞' => Ok(Wancho::LetterU),
'𞋟' => Ok(Wancho::LetterLlha),
'𞋠' => Ok(Wancho::LetterTsa),
'𞋡' => Ok(Wancho::LetterTra),
'𞋢' => Ok(Wancho::LetterOng),
'𞋣' => Ok(Wancho::LetterAang),
'𞋤' => Ok(Wancho::LetterAng),
'𞋥' => Ok(Wancho::LetterIng),
'𞋦' => Ok(Wancho::LetterOn),
'𞋧' => Ok(Wancho::LetterEn),
'𞋨' => Ok(Wancho::LetterAan),
'𞋩' => Ok(Wancho::LetterNya),
'𞋪' => Ok(Wancho::LetterUen),
'𞋫' => Ok(Wancho::LetterYih),
'𞋬' => Ok(Wancho::ToneTup),
'𞋭' => Ok(Wancho::ToneTupni),
'𞋮' => Ok(Wancho::ToneKoi),
'𞋯' => Ok(Wancho::ToneKoini),
'𞋰' => Ok(Wancho::DigitZero),
'𞋱' => Ok(Wancho::DigitOne),
'𞋲' => Ok(Wancho::DigitTwo),
'𞋳' => Ok(Wancho::DigitThree),
'𞋴' => Ok(Wancho::DigitFour),
'𞋵' => Ok(Wancho::DigitFive),
'𞋶' => Ok(Wancho::DigitSix),
'𞋷' => Ok(Wancho::DigitSeven),
'𞋸' => Ok(Wancho::DigitEight),
'𞋹' => 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) -> String {
let s = std::format!("Wancho{:#?}", self);
string_morph::to_sentence_case(&s)
}
}