mod constants {
pub const LETTER_A: char = '𑊰';
pub const LETTER_AA: char = '𑊱';
pub const LETTER_I: char = '𑊲';
pub const LETTER_II: char = '𑊳';
pub const LETTER_U: char = '𑊴';
pub const LETTER_UU: char = '𑊵';
pub const LETTER_E: char = '𑊶';
pub const LETTER_AI: char = '𑊷';
pub const LETTER_O: char = '𑊸';
pub const LETTER_AU: char = '𑊹';
pub const LETTER_KA: char = '𑊺';
pub const LETTER_KHA: char = '𑊻';
pub const LETTER_GA: char = '𑊼';
pub const LETTER_GGA: char = '𑊽';
pub const LETTER_GHA: char = '𑊾';
pub const LETTER_NGA: char = '𑊿';
pub const LETTER_CA: char = '𑋀';
pub const LETTER_CHA: char = '𑋁';
pub const LETTER_JA: char = '𑋂';
pub const LETTER_JJA: char = '𑋃';
pub const LETTER_JHA: char = '𑋄';
pub const LETTER_NYA: char = '𑋅';
pub const LETTER_TTA: char = '𑋆';
pub const LETTER_TTHA: char = '𑋇';
pub const LETTER_DDA: char = '𑋈';
pub const LETTER_DDDA: char = '𑋉';
pub const LETTER_RRA: char = '𑋊';
pub const LETTER_DDHA: char = '𑋋';
pub const LETTER_NNA: char = '𑋌';
pub const LETTER_TA: char = '𑋍';
pub const LETTER_THA: char = '𑋎';
pub const LETTER_DA: char = '𑋏';
pub const LETTER_DHA: char = '𑋐';
pub const LETTER_NA: char = '𑋑';
pub const LETTER_PA: char = '𑋒';
pub const LETTER_PHA: char = '𑋓';
pub const LETTER_BA: char = '𑋔';
pub const LETTER_BBA: char = '𑋕';
pub const LETTER_BHA: char = '𑋖';
pub const LETTER_MA: char = '𑋗';
pub const LETTER_YA: char = '𑋘';
pub const LETTER_RA: char = '𑋙';
pub const LETTER_LA: char = '𑋚';
pub const LETTER_VA: char = '𑋛';
pub const LETTER_SHA: char = '𑋜';
pub const LETTER_SA: char = '𑋝';
pub const LETTER_HA: char = '𑋞';
pub const SIGN_ANUSVARA: char = '𑋟';
pub const VOWEL_SIGN_AA: char = '𑋠';
pub const VOWEL_SIGN_I: char = '𑋡';
pub const VOWEL_SIGN_II: char = '𑋢';
pub const VOWEL_SIGN_U: char = '𑋣';
pub const VOWEL_SIGN_UU: char = '𑋤';
pub const VOWEL_SIGN_E: char = '𑋥';
pub const VOWEL_SIGN_AI: char = '𑋦';
pub const VOWEL_SIGN_O: char = '𑋧';
pub const VOWEL_SIGN_AU: char = '𑋨';
pub const SIGN_NUKTA: char = '𑋩';
pub const SIGN_VIRAMA: 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 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 {
use constants::*;
match self {
Khudawadi::LetterA => LETTER_A,
Khudawadi::LetterAa => LETTER_AA,
Khudawadi::LetterI => LETTER_I,
Khudawadi::LetterIi => LETTER_II,
Khudawadi::LetterU => LETTER_U,
Khudawadi::LetterUu => LETTER_UU,
Khudawadi::LetterE => LETTER_E,
Khudawadi::LetterAi => LETTER_AI,
Khudawadi::LetterO => LETTER_O,
Khudawadi::LetterAu => LETTER_AU,
Khudawadi::LetterKa => LETTER_KA,
Khudawadi::LetterKha => LETTER_KHA,
Khudawadi::LetterGa => LETTER_GA,
Khudawadi::LetterGga => LETTER_GGA,
Khudawadi::LetterGha => LETTER_GHA,
Khudawadi::LetterNga => LETTER_NGA,
Khudawadi::LetterCa => LETTER_CA,
Khudawadi::LetterCha => LETTER_CHA,
Khudawadi::LetterJa => LETTER_JA,
Khudawadi::LetterJja => LETTER_JJA,
Khudawadi::LetterJha => LETTER_JHA,
Khudawadi::LetterNya => LETTER_NYA,
Khudawadi::LetterTta => LETTER_TTA,
Khudawadi::LetterTtha => LETTER_TTHA,
Khudawadi::LetterDda => LETTER_DDA,
Khudawadi::LetterDdda => LETTER_DDDA,
Khudawadi::LetterRra => LETTER_RRA,
Khudawadi::LetterDdha => LETTER_DDHA,
Khudawadi::LetterNna => LETTER_NNA,
Khudawadi::LetterTa => LETTER_TA,
Khudawadi::LetterTha => LETTER_THA,
Khudawadi::LetterDa => LETTER_DA,
Khudawadi::LetterDha => LETTER_DHA,
Khudawadi::LetterNa => LETTER_NA,
Khudawadi::LetterPa => LETTER_PA,
Khudawadi::LetterPha => LETTER_PHA,
Khudawadi::LetterBa => LETTER_BA,
Khudawadi::LetterBba => LETTER_BBA,
Khudawadi::LetterBha => LETTER_BHA,
Khudawadi::LetterMa => LETTER_MA,
Khudawadi::LetterYa => LETTER_YA,
Khudawadi::LetterRa => LETTER_RA,
Khudawadi::LetterLa => LETTER_LA,
Khudawadi::LetterVa => LETTER_VA,
Khudawadi::LetterSha => LETTER_SHA,
Khudawadi::LetterSa => LETTER_SA,
Khudawadi::LetterHa => LETTER_HA,
Khudawadi::SignAnusvara => SIGN_ANUSVARA,
Khudawadi::VowelSignAa => VOWEL_SIGN_AA,
Khudawadi::VowelSignI => VOWEL_SIGN_I,
Khudawadi::VowelSignIi => VOWEL_SIGN_II,
Khudawadi::VowelSignU => VOWEL_SIGN_U,
Khudawadi::VowelSignUu => VOWEL_SIGN_UU,
Khudawadi::VowelSignE => VOWEL_SIGN_E,
Khudawadi::VowelSignAi => VOWEL_SIGN_AI,
Khudawadi::VowelSignO => VOWEL_SIGN_O,
Khudawadi::VowelSignAu => VOWEL_SIGN_AU,
Khudawadi::SignNukta => SIGN_NUKTA,
Khudawadi::SignVirama => SIGN_VIRAMA,
Khudawadi::DigitZero => DIGIT_ZERO,
Khudawadi::DigitOne => DIGIT_ONE,
Khudawadi::DigitTwo => DIGIT_TWO,
Khudawadi::DigitThree => DIGIT_THREE,
Khudawadi::DigitFour => DIGIT_FOUR,
Khudawadi::DigitFive => DIGIT_FIVE,
Khudawadi::DigitSix => DIGIT_SIX,
Khudawadi::DigitSeven => DIGIT_SEVEN,
Khudawadi::DigitEight => DIGIT_EIGHT,
Khudawadi::DigitNine => DIGIT_NINE,
}
}
}
impl std::convert::TryFrom<char> for Khudawadi {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_A => Ok(Khudawadi::LetterA),
LETTER_AA => Ok(Khudawadi::LetterAa),
LETTER_I => Ok(Khudawadi::LetterI),
LETTER_II => Ok(Khudawadi::LetterIi),
LETTER_U => Ok(Khudawadi::LetterU),
LETTER_UU => Ok(Khudawadi::LetterUu),
LETTER_E => Ok(Khudawadi::LetterE),
LETTER_AI => Ok(Khudawadi::LetterAi),
LETTER_O => Ok(Khudawadi::LetterO),
LETTER_AU => Ok(Khudawadi::LetterAu),
LETTER_KA => Ok(Khudawadi::LetterKa),
LETTER_KHA => Ok(Khudawadi::LetterKha),
LETTER_GA => Ok(Khudawadi::LetterGa),
LETTER_GGA => Ok(Khudawadi::LetterGga),
LETTER_GHA => Ok(Khudawadi::LetterGha),
LETTER_NGA => Ok(Khudawadi::LetterNga),
LETTER_CA => Ok(Khudawadi::LetterCa),
LETTER_CHA => Ok(Khudawadi::LetterCha),
LETTER_JA => Ok(Khudawadi::LetterJa),
LETTER_JJA => Ok(Khudawadi::LetterJja),
LETTER_JHA => Ok(Khudawadi::LetterJha),
LETTER_NYA => Ok(Khudawadi::LetterNya),
LETTER_TTA => Ok(Khudawadi::LetterTta),
LETTER_TTHA => Ok(Khudawadi::LetterTtha),
LETTER_DDA => Ok(Khudawadi::LetterDda),
LETTER_DDDA => Ok(Khudawadi::LetterDdda),
LETTER_RRA => Ok(Khudawadi::LetterRra),
LETTER_DDHA => Ok(Khudawadi::LetterDdha),
LETTER_NNA => Ok(Khudawadi::LetterNna),
LETTER_TA => Ok(Khudawadi::LetterTa),
LETTER_THA => Ok(Khudawadi::LetterTha),
LETTER_DA => Ok(Khudawadi::LetterDa),
LETTER_DHA => Ok(Khudawadi::LetterDha),
LETTER_NA => Ok(Khudawadi::LetterNa),
LETTER_PA => Ok(Khudawadi::LetterPa),
LETTER_PHA => Ok(Khudawadi::LetterPha),
LETTER_BA => Ok(Khudawadi::LetterBa),
LETTER_BBA => Ok(Khudawadi::LetterBba),
LETTER_BHA => Ok(Khudawadi::LetterBha),
LETTER_MA => Ok(Khudawadi::LetterMa),
LETTER_YA => Ok(Khudawadi::LetterYa),
LETTER_RA => Ok(Khudawadi::LetterRa),
LETTER_LA => Ok(Khudawadi::LetterLa),
LETTER_VA => Ok(Khudawadi::LetterVa),
LETTER_SHA => Ok(Khudawadi::LetterSha),
LETTER_SA => Ok(Khudawadi::LetterSa),
LETTER_HA => Ok(Khudawadi::LetterHa),
SIGN_ANUSVARA => Ok(Khudawadi::SignAnusvara),
VOWEL_SIGN_AA => Ok(Khudawadi::VowelSignAa),
VOWEL_SIGN_I => Ok(Khudawadi::VowelSignI),
VOWEL_SIGN_II => Ok(Khudawadi::VowelSignIi),
VOWEL_SIGN_U => Ok(Khudawadi::VowelSignU),
VOWEL_SIGN_UU => Ok(Khudawadi::VowelSignUu),
VOWEL_SIGN_E => Ok(Khudawadi::VowelSignE),
VOWEL_SIGN_AI => Ok(Khudawadi::VowelSignAi),
VOWEL_SIGN_O => Ok(Khudawadi::VowelSignO),
VOWEL_SIGN_AU => Ok(Khudawadi::VowelSignAu),
SIGN_NUKTA => Ok(Khudawadi::SignNukta),
SIGN_VIRAMA => Ok(Khudawadi::SignVirama),
DIGIT_ZERO => Ok(Khudawadi::DigitZero),
DIGIT_ONE => Ok(Khudawadi::DigitOne),
DIGIT_TWO => Ok(Khudawadi::DigitTwo),
DIGIT_THREE => Ok(Khudawadi::DigitThree),
DIGIT_FOUR => Ok(Khudawadi::DigitFour),
DIGIT_FIVE => Ok(Khudawadi::DigitFive),
DIGIT_SIX => Ok(Khudawadi::DigitSix),
DIGIT_SEVEN => Ok(Khudawadi::DigitSeven),
DIGIT_EIGHT => Ok(Khudawadi::DigitEight),
DIGIT_NINE => 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) -> &str {
match self {
Khudawadi::LetterA => "khudawadi letter a",
Khudawadi::LetterAa => "khudawadi letter aa",
Khudawadi::LetterI => "khudawadi letter i",
Khudawadi::LetterIi => "khudawadi letter ii",
Khudawadi::LetterU => "khudawadi letter u",
Khudawadi::LetterUu => "khudawadi letter uu",
Khudawadi::LetterE => "khudawadi letter e",
Khudawadi::LetterAi => "khudawadi letter ai",
Khudawadi::LetterO => "khudawadi letter o",
Khudawadi::LetterAu => "khudawadi letter au",
Khudawadi::LetterKa => "khudawadi letter ka",
Khudawadi::LetterKha => "khudawadi letter kha",
Khudawadi::LetterGa => "khudawadi letter ga",
Khudawadi::LetterGga => "khudawadi letter gga",
Khudawadi::LetterGha => "khudawadi letter gha",
Khudawadi::LetterNga => "khudawadi letter nga",
Khudawadi::LetterCa => "khudawadi letter ca",
Khudawadi::LetterCha => "khudawadi letter cha",
Khudawadi::LetterJa => "khudawadi letter ja",
Khudawadi::LetterJja => "khudawadi letter jja",
Khudawadi::LetterJha => "khudawadi letter jha",
Khudawadi::LetterNya => "khudawadi letter nya",
Khudawadi::LetterTta => "khudawadi letter tta",
Khudawadi::LetterTtha => "khudawadi letter ttha",
Khudawadi::LetterDda => "khudawadi letter dda",
Khudawadi::LetterDdda => "khudawadi letter ddda",
Khudawadi::LetterRra => "khudawadi letter rra",
Khudawadi::LetterDdha => "khudawadi letter ddha",
Khudawadi::LetterNna => "khudawadi letter nna",
Khudawadi::LetterTa => "khudawadi letter ta",
Khudawadi::LetterTha => "khudawadi letter tha",
Khudawadi::LetterDa => "khudawadi letter da",
Khudawadi::LetterDha => "khudawadi letter dha",
Khudawadi::LetterNa => "khudawadi letter na",
Khudawadi::LetterPa => "khudawadi letter pa",
Khudawadi::LetterPha => "khudawadi letter pha",
Khudawadi::LetterBa => "khudawadi letter ba",
Khudawadi::LetterBba => "khudawadi letter bba",
Khudawadi::LetterBha => "khudawadi letter bha",
Khudawadi::LetterMa => "khudawadi letter ma",
Khudawadi::LetterYa => "khudawadi letter ya",
Khudawadi::LetterRa => "khudawadi letter ra",
Khudawadi::LetterLa => "khudawadi letter la",
Khudawadi::LetterVa => "khudawadi letter va",
Khudawadi::LetterSha => "khudawadi letter sha",
Khudawadi::LetterSa => "khudawadi letter sa",
Khudawadi::LetterHa => "khudawadi letter ha",
Khudawadi::SignAnusvara => "khudawadi sign anusvara",
Khudawadi::VowelSignAa => "khudawadi vowel sign aa",
Khudawadi::VowelSignI => "khudawadi vowel sign i",
Khudawadi::VowelSignIi => "khudawadi vowel sign ii",
Khudawadi::VowelSignU => "khudawadi vowel sign u",
Khudawadi::VowelSignUu => "khudawadi vowel sign uu",
Khudawadi::VowelSignE => "khudawadi vowel sign e",
Khudawadi::VowelSignAi => "khudawadi vowel sign ai",
Khudawadi::VowelSignO => "khudawadi vowel sign o",
Khudawadi::VowelSignAu => "khudawadi vowel sign au",
Khudawadi::SignNukta => "khudawadi sign nukta",
Khudawadi::SignVirama => "khudawadi sign virama",
Khudawadi::DigitZero => "khudawadi digit zero",
Khudawadi::DigitOne => "khudawadi digit one",
Khudawadi::DigitTwo => "khudawadi digit two",
Khudawadi::DigitThree => "khudawadi digit three",
Khudawadi::DigitFour => "khudawadi digit four",
Khudawadi::DigitFive => "khudawadi digit five",
Khudawadi::DigitSix => "khudawadi digit six",
Khudawadi::DigitSeven => "khudawadi digit seven",
Khudawadi::DigitEight => "khudawadi digit eight",
Khudawadi::DigitNine => "khudawadi digit nine",
}
}
}