mod constants {
pub const LETTER_KA: char = '𑜀';
pub const LETTER_KHA: char = '𑜁';
pub const LETTER_NGA: char = '𑜂';
pub const LETTER_NA: char = '𑜃';
pub const LETTER_TA: char = '𑜄';
pub const LETTER_ALTERNATE_TA: char = '𑜅';
pub const LETTER_PA: char = '𑜆';
pub const LETTER_PHA: char = '𑜇';
pub const LETTER_BA: char = '𑜈';
pub const LETTER_MA: char = '𑜉';
pub const LETTER_JA: char = '𑜊';
pub const LETTER_CHA: char = '𑜋';
pub const LETTER_THA: char = '𑜌';
pub const LETTER_RA: char = '𑜍';
pub const LETTER_LA: char = '𑜎';
pub const LETTER_SA: char = '𑜏';
pub const LETTER_NYA: char = '𑜐';
pub const LETTER_HA: char = '𑜑';
pub const LETTER_A: char = '𑜒';
pub const LETTER_DA: char = '𑜓';
pub const LETTER_DHA: char = '𑜔';
pub const LETTER_GA: char = '𑜕';
pub const LETTER_ALTERNATE_GA: char = '𑜖';
pub const LETTER_GHA: char = '𑜗';
pub const LETTER_BHA: char = '𑜘';
pub const LETTER_JHA: char = '𑜙';
pub const LETTER_ALTERNATE_BA: char = '𑜚';
pub const CONSONANT_SIGN_MEDIAL_LA: char = '𑜝';
pub const CONSONANT_SIGN_MEDIAL_RA: char = '𑜞';
pub const CONSONANT_SIGN_MEDIAL_LIGATING_RA: char = '𑜟';
pub const VOWEL_SIGN_A: 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_AW: char = '𑜧';
pub const VOWEL_SIGN_O: char = '𑜨';
pub const VOWEL_SIGN_AI: char = '𑜩';
pub const VOWEL_SIGN_AM: char = '𑜪';
pub const SIGN_KILLER: 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 = '𑜹';
pub const NUMBER_TEN: char = '𑜺';
pub const NUMBER_TWENTY: char = '𑜻';
pub const SIGN_SMALL_SECTION: char = '𑜼';
pub const SIGN_SECTION: char = '𑜽';
pub const SIGN_RULAI: char = '𑜾';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Ahom {
LetterKa,
LetterKha,
LetterNga,
LetterNa,
LetterTa,
LetterAlternateTa,
LetterPa,
LetterPha,
LetterBa,
LetterMa,
LetterJa,
LetterCha,
LetterTha,
LetterRa,
LetterLa,
LetterSa,
LetterNya,
LetterHa,
LetterA,
LetterDa,
LetterDha,
LetterGa,
LetterAlternateGa,
LetterGha,
LetterBha,
LetterJha,
LetterAlternateBa,
ConsonantSignMedialLa,
ConsonantSignMedialRa,
ConsonantSignMedialLigatingRa,
VowelSignA,
VowelSignAa,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignE,
VowelSignAw,
VowelSignO,
VowelSignAi,
VowelSignAm,
SignKiller,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
NumberTen,
NumberTwenty,
SignSmallSection,
SignSection,
SignRulai,
}
impl Into<char> for Ahom {
fn into(self) -> char {
use constants::*;
match self {
Ahom::LetterKa => LETTER_KA,
Ahom::LetterKha => LETTER_KHA,
Ahom::LetterNga => LETTER_NGA,
Ahom::LetterNa => LETTER_NA,
Ahom::LetterTa => LETTER_TA,
Ahom::LetterAlternateTa => LETTER_ALTERNATE_TA,
Ahom::LetterPa => LETTER_PA,
Ahom::LetterPha => LETTER_PHA,
Ahom::LetterBa => LETTER_BA,
Ahom::LetterMa => LETTER_MA,
Ahom::LetterJa => LETTER_JA,
Ahom::LetterCha => LETTER_CHA,
Ahom::LetterTha => LETTER_THA,
Ahom::LetterRa => LETTER_RA,
Ahom::LetterLa => LETTER_LA,
Ahom::LetterSa => LETTER_SA,
Ahom::LetterNya => LETTER_NYA,
Ahom::LetterHa => LETTER_HA,
Ahom::LetterA => LETTER_A,
Ahom::LetterDa => LETTER_DA,
Ahom::LetterDha => LETTER_DHA,
Ahom::LetterGa => LETTER_GA,
Ahom::LetterAlternateGa => LETTER_ALTERNATE_GA,
Ahom::LetterGha => LETTER_GHA,
Ahom::LetterBha => LETTER_BHA,
Ahom::LetterJha => LETTER_JHA,
Ahom::LetterAlternateBa => LETTER_ALTERNATE_BA,
Ahom::ConsonantSignMedialLa => CONSONANT_SIGN_MEDIAL_LA,
Ahom::ConsonantSignMedialRa => CONSONANT_SIGN_MEDIAL_RA,
Ahom::ConsonantSignMedialLigatingRa => CONSONANT_SIGN_MEDIAL_LIGATING_RA,
Ahom::VowelSignA => VOWEL_SIGN_A,
Ahom::VowelSignAa => VOWEL_SIGN_AA,
Ahom::VowelSignI => VOWEL_SIGN_I,
Ahom::VowelSignIi => VOWEL_SIGN_II,
Ahom::VowelSignU => VOWEL_SIGN_U,
Ahom::VowelSignUu => VOWEL_SIGN_UU,
Ahom::VowelSignE => VOWEL_SIGN_E,
Ahom::VowelSignAw => VOWEL_SIGN_AW,
Ahom::VowelSignO => VOWEL_SIGN_O,
Ahom::VowelSignAi => VOWEL_SIGN_AI,
Ahom::VowelSignAm => VOWEL_SIGN_AM,
Ahom::SignKiller => SIGN_KILLER,
Ahom::DigitZero => DIGIT_ZERO,
Ahom::DigitOne => DIGIT_ONE,
Ahom::DigitTwo => DIGIT_TWO,
Ahom::DigitThree => DIGIT_THREE,
Ahom::DigitFour => DIGIT_FOUR,
Ahom::DigitFive => DIGIT_FIVE,
Ahom::DigitSix => DIGIT_SIX,
Ahom::DigitSeven => DIGIT_SEVEN,
Ahom::DigitEight => DIGIT_EIGHT,
Ahom::DigitNine => DIGIT_NINE,
Ahom::NumberTen => NUMBER_TEN,
Ahom::NumberTwenty => NUMBER_TWENTY,
Ahom::SignSmallSection => SIGN_SMALL_SECTION,
Ahom::SignSection => SIGN_SECTION,
Ahom::SignRulai => SIGN_RULAI,
}
}
}
impl std::convert::TryFrom<char> for Ahom {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_KA => Ok(Ahom::LetterKa),
LETTER_KHA => Ok(Ahom::LetterKha),
LETTER_NGA => Ok(Ahom::LetterNga),
LETTER_NA => Ok(Ahom::LetterNa),
LETTER_TA => Ok(Ahom::LetterTa),
LETTER_ALTERNATE_TA => Ok(Ahom::LetterAlternateTa),
LETTER_PA => Ok(Ahom::LetterPa),
LETTER_PHA => Ok(Ahom::LetterPha),
LETTER_BA => Ok(Ahom::LetterBa),
LETTER_MA => Ok(Ahom::LetterMa),
LETTER_JA => Ok(Ahom::LetterJa),
LETTER_CHA => Ok(Ahom::LetterCha),
LETTER_THA => Ok(Ahom::LetterTha),
LETTER_RA => Ok(Ahom::LetterRa),
LETTER_LA => Ok(Ahom::LetterLa),
LETTER_SA => Ok(Ahom::LetterSa),
LETTER_NYA => Ok(Ahom::LetterNya),
LETTER_HA => Ok(Ahom::LetterHa),
LETTER_A => Ok(Ahom::LetterA),
LETTER_DA => Ok(Ahom::LetterDa),
LETTER_DHA => Ok(Ahom::LetterDha),
LETTER_GA => Ok(Ahom::LetterGa),
LETTER_ALTERNATE_GA => Ok(Ahom::LetterAlternateGa),
LETTER_GHA => Ok(Ahom::LetterGha),
LETTER_BHA => Ok(Ahom::LetterBha),
LETTER_JHA => Ok(Ahom::LetterJha),
LETTER_ALTERNATE_BA => Ok(Ahom::LetterAlternateBa),
CONSONANT_SIGN_MEDIAL_LA => Ok(Ahom::ConsonantSignMedialLa),
CONSONANT_SIGN_MEDIAL_RA => Ok(Ahom::ConsonantSignMedialRa),
CONSONANT_SIGN_MEDIAL_LIGATING_RA => Ok(Ahom::ConsonantSignMedialLigatingRa),
VOWEL_SIGN_A => Ok(Ahom::VowelSignA),
VOWEL_SIGN_AA => Ok(Ahom::VowelSignAa),
VOWEL_SIGN_I => Ok(Ahom::VowelSignI),
VOWEL_SIGN_II => Ok(Ahom::VowelSignIi),
VOWEL_SIGN_U => Ok(Ahom::VowelSignU),
VOWEL_SIGN_UU => Ok(Ahom::VowelSignUu),
VOWEL_SIGN_E => Ok(Ahom::VowelSignE),
VOWEL_SIGN_AW => Ok(Ahom::VowelSignAw),
VOWEL_SIGN_O => Ok(Ahom::VowelSignO),
VOWEL_SIGN_AI => Ok(Ahom::VowelSignAi),
VOWEL_SIGN_AM => Ok(Ahom::VowelSignAm),
SIGN_KILLER => Ok(Ahom::SignKiller),
DIGIT_ZERO => Ok(Ahom::DigitZero),
DIGIT_ONE => Ok(Ahom::DigitOne),
DIGIT_TWO => Ok(Ahom::DigitTwo),
DIGIT_THREE => Ok(Ahom::DigitThree),
DIGIT_FOUR => Ok(Ahom::DigitFour),
DIGIT_FIVE => Ok(Ahom::DigitFive),
DIGIT_SIX => Ok(Ahom::DigitSix),
DIGIT_SEVEN => Ok(Ahom::DigitSeven),
DIGIT_EIGHT => Ok(Ahom::DigitEight),
DIGIT_NINE => Ok(Ahom::DigitNine),
NUMBER_TEN => Ok(Ahom::NumberTen),
NUMBER_TWENTY => Ok(Ahom::NumberTwenty),
SIGN_SMALL_SECTION => Ok(Ahom::SignSmallSection),
SIGN_SECTION => Ok(Ahom::SignSection),
SIGN_RULAI => Ok(Ahom::SignRulai),
_ => Err(()),
}
}
}
impl Into<u32> for Ahom {
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 Ahom {
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 Ahom {
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 Ahom {
pub fn new() -> Self {
Ahom::LetterKa
}
pub fn name(&self) -> &str {
match self {
Ahom::LetterKa => "ahom letter ka",
Ahom::LetterKha => "ahom letter kha",
Ahom::LetterNga => "ahom letter nga",
Ahom::LetterNa => "ahom letter na",
Ahom::LetterTa => "ahom letter ta",
Ahom::LetterAlternateTa => "ahom letter alternate ta",
Ahom::LetterPa => "ahom letter pa",
Ahom::LetterPha => "ahom letter pha",
Ahom::LetterBa => "ahom letter ba",
Ahom::LetterMa => "ahom letter ma",
Ahom::LetterJa => "ahom letter ja",
Ahom::LetterCha => "ahom letter cha",
Ahom::LetterTha => "ahom letter tha",
Ahom::LetterRa => "ahom letter ra",
Ahom::LetterLa => "ahom letter la",
Ahom::LetterSa => "ahom letter sa",
Ahom::LetterNya => "ahom letter nya",
Ahom::LetterHa => "ahom letter ha",
Ahom::LetterA => "ahom letter a",
Ahom::LetterDa => "ahom letter da",
Ahom::LetterDha => "ahom letter dha",
Ahom::LetterGa => "ahom letter ga",
Ahom::LetterAlternateGa => "ahom letter alternate ga",
Ahom::LetterGha => "ahom letter gha",
Ahom::LetterBha => "ahom letter bha",
Ahom::LetterJha => "ahom letter jha",
Ahom::LetterAlternateBa => "ahom letter alternate ba",
Ahom::ConsonantSignMedialLa => "ahom consonant sign medial la",
Ahom::ConsonantSignMedialRa => "ahom consonant sign medial ra",
Ahom::ConsonantSignMedialLigatingRa => "ahom consonant sign medial ligating ra",
Ahom::VowelSignA => "ahom vowel sign a",
Ahom::VowelSignAa => "ahom vowel sign aa",
Ahom::VowelSignI => "ahom vowel sign i",
Ahom::VowelSignIi => "ahom vowel sign ii",
Ahom::VowelSignU => "ahom vowel sign u",
Ahom::VowelSignUu => "ahom vowel sign uu",
Ahom::VowelSignE => "ahom vowel sign e",
Ahom::VowelSignAw => "ahom vowel sign aw",
Ahom::VowelSignO => "ahom vowel sign o",
Ahom::VowelSignAi => "ahom vowel sign ai",
Ahom::VowelSignAm => "ahom vowel sign am",
Ahom::SignKiller => "ahom sign killer",
Ahom::DigitZero => "ahom digit zero",
Ahom::DigitOne => "ahom digit one",
Ahom::DigitTwo => "ahom digit two",
Ahom::DigitThree => "ahom digit three",
Ahom::DigitFour => "ahom digit four",
Ahom::DigitFive => "ahom digit five",
Ahom::DigitSix => "ahom digit six",
Ahom::DigitSeven => "ahom digit seven",
Ahom::DigitEight => "ahom digit eight",
Ahom::DigitNine => "ahom digit nine",
Ahom::NumberTen => "ahom number ten",
Ahom::NumberTwenty => "ahom number twenty",
Ahom::SignSmallSection => "ahom sign small section",
Ahom::SignSection => "ahom sign section",
Ahom::SignRulai => "ahom sign rulai",
}
}
}