#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Khudawadi {
LetterA,
LetterAa,
LetterI,
LetterIi,
LetterU,
LetterUu,
LetterE,
LetterAi,
LetterO,
LetterAu,
LetterKa,
LetterKha,
LetterGa,
LetterGga,
LetterGha,
LetterNga,
LetterCa,
LetterCha,
LetterJa,
LetterJja,
LetterJha,
LetterNya,
LetterTta,
LetterTtha,
LetterDda,
LetterDdda,
LetterRra,
LetterDdha,
LetterNna,
LetterTa,
LetterTha,
LetterDa,
LetterDha,
LetterNa,
LetterPa,
LetterPha,
LetterBa,
LetterBba,
LetterBha,
LetterMa,
LetterYa,
LetterRa,
LetterLa,
LetterVa,
LetterSha,
LetterSa,
LetterHa,
SignAnusvara,
VowelSignAa,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignE,
VowelSignAi,
VowelSignO,
VowelSignAu,
SignNukta,
SignVirama,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
}
impl Into<char> for Khudawadi {
fn into(self) -> char {
match self {
Khudawadi::LetterA => '𑊰',
Khudawadi::LetterAa => '𑊱',
Khudawadi::LetterI => '𑊲',
Khudawadi::LetterIi => '𑊳',
Khudawadi::LetterU => '𑊴',
Khudawadi::LetterUu => '𑊵',
Khudawadi::LetterE => '𑊶',
Khudawadi::LetterAi => '𑊷',
Khudawadi::LetterO => '𑊸',
Khudawadi::LetterAu => '𑊹',
Khudawadi::LetterKa => '𑊺',
Khudawadi::LetterKha => '𑊻',
Khudawadi::LetterGa => '𑊼',
Khudawadi::LetterGga => '𑊽',
Khudawadi::LetterGha => '𑊾',
Khudawadi::LetterNga => '𑊿',
Khudawadi::LetterCa => '𑋀',
Khudawadi::LetterCha => '𑋁',
Khudawadi::LetterJa => '𑋂',
Khudawadi::LetterJja => '𑋃',
Khudawadi::LetterJha => '𑋄',
Khudawadi::LetterNya => '𑋅',
Khudawadi::LetterTta => '𑋆',
Khudawadi::LetterTtha => '𑋇',
Khudawadi::LetterDda => '𑋈',
Khudawadi::LetterDdda => '𑋉',
Khudawadi::LetterRra => '𑋊',
Khudawadi::LetterDdha => '𑋋',
Khudawadi::LetterNna => '𑋌',
Khudawadi::LetterTa => '𑋍',
Khudawadi::LetterTha => '𑋎',
Khudawadi::LetterDa => '𑋏',
Khudawadi::LetterDha => '𑋐',
Khudawadi::LetterNa => '𑋑',
Khudawadi::LetterPa => '𑋒',
Khudawadi::LetterPha => '𑋓',
Khudawadi::LetterBa => '𑋔',
Khudawadi::LetterBba => '𑋕',
Khudawadi::LetterBha => '𑋖',
Khudawadi::LetterMa => '𑋗',
Khudawadi::LetterYa => '𑋘',
Khudawadi::LetterRa => '𑋙',
Khudawadi::LetterLa => '𑋚',
Khudawadi::LetterVa => '𑋛',
Khudawadi::LetterSha => '𑋜',
Khudawadi::LetterSa => '𑋝',
Khudawadi::LetterHa => '𑋞',
Khudawadi::SignAnusvara => '𑋟',
Khudawadi::VowelSignAa => '𑋠',
Khudawadi::VowelSignI => '𑋡',
Khudawadi::VowelSignIi => '𑋢',
Khudawadi::VowelSignU => '𑋣',
Khudawadi::VowelSignUu => '𑋤',
Khudawadi::VowelSignE => '𑋥',
Khudawadi::VowelSignAi => '𑋦',
Khudawadi::VowelSignO => '𑋧',
Khudawadi::VowelSignAu => '𑋨',
Khudawadi::SignNukta => '𑋩',
Khudawadi::SignVirama => '𑋪',
Khudawadi::DigitZero => '𑋰',
Khudawadi::DigitOne => '𑋱',
Khudawadi::DigitTwo => '𑋲',
Khudawadi::DigitThree => '𑋳',
Khudawadi::DigitFour => '𑋴',
Khudawadi::DigitFive => '𑋵',
Khudawadi::DigitSix => '𑋶',
Khudawadi::DigitSeven => '𑋷',
Khudawadi::DigitEight => '𑋸',
Khudawadi::DigitNine => '𑋹',
}
}
}
impl std::convert::TryFrom<char> for Khudawadi {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𑊰' => Ok(Khudawadi::LetterA),
'𑊱' => Ok(Khudawadi::LetterAa),
'𑊲' => Ok(Khudawadi::LetterI),
'𑊳' => Ok(Khudawadi::LetterIi),
'𑊴' => Ok(Khudawadi::LetterU),
'𑊵' => Ok(Khudawadi::LetterUu),
'𑊶' => Ok(Khudawadi::LetterE),
'𑊷' => Ok(Khudawadi::LetterAi),
'𑊸' => Ok(Khudawadi::LetterO),
'𑊹' => Ok(Khudawadi::LetterAu),
'𑊺' => Ok(Khudawadi::LetterKa),
'𑊻' => Ok(Khudawadi::LetterKha),
'𑊼' => Ok(Khudawadi::LetterGa),
'𑊽' => Ok(Khudawadi::LetterGga),
'𑊾' => Ok(Khudawadi::LetterGha),
'𑊿' => Ok(Khudawadi::LetterNga),
'𑋀' => Ok(Khudawadi::LetterCa),
'𑋁' => Ok(Khudawadi::LetterCha),
'𑋂' => Ok(Khudawadi::LetterJa),
'𑋃' => Ok(Khudawadi::LetterJja),
'𑋄' => Ok(Khudawadi::LetterJha),
'𑋅' => Ok(Khudawadi::LetterNya),
'𑋆' => Ok(Khudawadi::LetterTta),
'𑋇' => Ok(Khudawadi::LetterTtha),
'𑋈' => Ok(Khudawadi::LetterDda),
'𑋉' => Ok(Khudawadi::LetterDdda),
'𑋊' => Ok(Khudawadi::LetterRra),
'𑋋' => Ok(Khudawadi::LetterDdha),
'𑋌' => Ok(Khudawadi::LetterNna),
'𑋍' => Ok(Khudawadi::LetterTa),
'𑋎' => Ok(Khudawadi::LetterTha),
'𑋏' => Ok(Khudawadi::LetterDa),
'𑋐' => Ok(Khudawadi::LetterDha),
'𑋑' => Ok(Khudawadi::LetterNa),
'𑋒' => Ok(Khudawadi::LetterPa),
'𑋓' => Ok(Khudawadi::LetterPha),
'𑋔' => Ok(Khudawadi::LetterBa),
'𑋕' => Ok(Khudawadi::LetterBba),
'𑋖' => Ok(Khudawadi::LetterBha),
'𑋗' => Ok(Khudawadi::LetterMa),
'𑋘' => Ok(Khudawadi::LetterYa),
'𑋙' => Ok(Khudawadi::LetterRa),
'𑋚' => Ok(Khudawadi::LetterLa),
'𑋛' => Ok(Khudawadi::LetterVa),
'𑋜' => Ok(Khudawadi::LetterSha),
'𑋝' => Ok(Khudawadi::LetterSa),
'𑋞' => Ok(Khudawadi::LetterHa),
'𑋟' => Ok(Khudawadi::SignAnusvara),
'𑋠' => Ok(Khudawadi::VowelSignAa),
'𑋡' => Ok(Khudawadi::VowelSignI),
'𑋢' => Ok(Khudawadi::VowelSignIi),
'𑋣' => Ok(Khudawadi::VowelSignU),
'𑋤' => Ok(Khudawadi::VowelSignUu),
'𑋥' => Ok(Khudawadi::VowelSignE),
'𑋦' => Ok(Khudawadi::VowelSignAi),
'𑋧' => Ok(Khudawadi::VowelSignO),
'𑋨' => Ok(Khudawadi::VowelSignAu),
'𑋩' => Ok(Khudawadi::SignNukta),
'𑋪' => Ok(Khudawadi::SignVirama),
'𑋰' => Ok(Khudawadi::DigitZero),
'𑋱' => Ok(Khudawadi::DigitOne),
'𑋲' => Ok(Khudawadi::DigitTwo),
'𑋳' => Ok(Khudawadi::DigitThree),
'𑋴' => Ok(Khudawadi::DigitFour),
'𑋵' => Ok(Khudawadi::DigitFive),
'𑋶' => Ok(Khudawadi::DigitSix),
'𑋷' => Ok(Khudawadi::DigitSeven),
'𑋸' => Ok(Khudawadi::DigitEight),
'𑋹' => Ok(Khudawadi::DigitNine),
_ => Err(()),
}
}
}
impl Into<u32> for Khudawadi {
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 Khudawadi {
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 Khudawadi {
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 Khudawadi {
pub fn new() -> Self {
Khudawadi::LetterA
}
pub fn name(&self) -> String {
let s = std::format!("Khudawadi{:#?}", self);
string_morph::to_sentence_case(&s)
}
}