#[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 {
match self {
Ahom::LetterKa => '𑜀',
Ahom::LetterKha => '𑜁',
Ahom::LetterNga => '𑜂',
Ahom::LetterNa => '𑜃',
Ahom::LetterTa => '𑜄',
Ahom::LetterAlternateTa => '𑜅',
Ahom::LetterPa => '𑜆',
Ahom::LetterPha => '𑜇',
Ahom::LetterBa => '𑜈',
Ahom::LetterMa => '𑜉',
Ahom::LetterJa => '𑜊',
Ahom::LetterCha => '𑜋',
Ahom::LetterTha => '𑜌',
Ahom::LetterRa => '𑜍',
Ahom::LetterLa => '𑜎',
Ahom::LetterSa => '𑜏',
Ahom::LetterNya => '𑜐',
Ahom::LetterHa => '𑜑',
Ahom::LetterA => '𑜒',
Ahom::LetterDa => '𑜓',
Ahom::LetterDha => '𑜔',
Ahom::LetterGa => '𑜕',
Ahom::LetterAlternateGa => '𑜖',
Ahom::LetterGha => '𑜗',
Ahom::LetterBha => '𑜘',
Ahom::LetterJha => '𑜙',
Ahom::LetterAlternateBa => '𑜚',
Ahom::ConsonantSignMedialLa => '𑜝',
Ahom::ConsonantSignMedialRa => '𑜞',
Ahom::ConsonantSignMedialLigatingRa => '𑜟',
Ahom::VowelSignA => '𑜠',
Ahom::VowelSignAa => '𑜡',
Ahom::VowelSignI => '𑜢',
Ahom::VowelSignIi => '𑜣',
Ahom::VowelSignU => '𑜤',
Ahom::VowelSignUu => '𑜥',
Ahom::VowelSignE => '𑜦',
Ahom::VowelSignAw => '𑜧',
Ahom::VowelSignO => '𑜨',
Ahom::VowelSignAi => '𑜩',
Ahom::VowelSignAm => '𑜪',
Ahom::SignKiller => '𑜫',
Ahom::DigitZero => '𑜰',
Ahom::DigitOne => '𑜱',
Ahom::DigitTwo => '𑜲',
Ahom::DigitThree => '𑜳',
Ahom::DigitFour => '𑜴',
Ahom::DigitFive => '𑜵',
Ahom::DigitSix => '𑜶',
Ahom::DigitSeven => '𑜷',
Ahom::DigitEight => '𑜸',
Ahom::DigitNine => '𑜹',
Ahom::NumberTen => '𑜺',
Ahom::NumberTwenty => '𑜻',
Ahom::SignSmallSection => '𑜼',
Ahom::SignSection => '𑜽',
Ahom::SignRulai => '𑜾',
}
}
}
impl std::convert::TryFrom<char> for Ahom {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𑜀' => Ok(Ahom::LetterKa),
'𑜁' => Ok(Ahom::LetterKha),
'𑜂' => Ok(Ahom::LetterNga),
'𑜃' => Ok(Ahom::LetterNa),
'𑜄' => Ok(Ahom::LetterTa),
'𑜅' => Ok(Ahom::LetterAlternateTa),
'𑜆' => Ok(Ahom::LetterPa),
'𑜇' => Ok(Ahom::LetterPha),
'𑜈' => Ok(Ahom::LetterBa),
'𑜉' => Ok(Ahom::LetterMa),
'𑜊' => Ok(Ahom::LetterJa),
'𑜋' => Ok(Ahom::LetterCha),
'𑜌' => Ok(Ahom::LetterTha),
'𑜍' => Ok(Ahom::LetterRa),
'𑜎' => Ok(Ahom::LetterLa),
'𑜏' => Ok(Ahom::LetterSa),
'𑜐' => Ok(Ahom::LetterNya),
'𑜑' => Ok(Ahom::LetterHa),
'𑜒' => Ok(Ahom::LetterA),
'𑜓' => Ok(Ahom::LetterDa),
'𑜔' => Ok(Ahom::LetterDha),
'𑜕' => Ok(Ahom::LetterGa),
'𑜖' => Ok(Ahom::LetterAlternateGa),
'𑜗' => Ok(Ahom::LetterGha),
'𑜘' => Ok(Ahom::LetterBha),
'𑜙' => Ok(Ahom::LetterJha),
'𑜚' => Ok(Ahom::LetterAlternateBa),
'𑜝' => Ok(Ahom::ConsonantSignMedialLa),
'𑜞' => Ok(Ahom::ConsonantSignMedialRa),
'𑜟' => Ok(Ahom::ConsonantSignMedialLigatingRa),
'𑜠' => Ok(Ahom::VowelSignA),
'𑜡' => Ok(Ahom::VowelSignAa),
'𑜢' => Ok(Ahom::VowelSignI),
'𑜣' => Ok(Ahom::VowelSignIi),
'𑜤' => Ok(Ahom::VowelSignU),
'𑜥' => Ok(Ahom::VowelSignUu),
'𑜦' => Ok(Ahom::VowelSignE),
'𑜧' => Ok(Ahom::VowelSignAw),
'𑜨' => Ok(Ahom::VowelSignO),
'𑜩' => Ok(Ahom::VowelSignAi),
'𑜪' => Ok(Ahom::VowelSignAm),
'𑜫' => Ok(Ahom::SignKiller),
'𑜰' => Ok(Ahom::DigitZero),
'𑜱' => Ok(Ahom::DigitOne),
'𑜲' => Ok(Ahom::DigitTwo),
'𑜳' => Ok(Ahom::DigitThree),
'𑜴' => Ok(Ahom::DigitFour),
'𑜵' => Ok(Ahom::DigitFive),
'𑜶' => Ok(Ahom::DigitSix),
'𑜷' => Ok(Ahom::DigitSeven),
'𑜸' => Ok(Ahom::DigitEight),
'𑜹' => Ok(Ahom::DigitNine),
'𑜺' => Ok(Ahom::NumberTen),
'𑜻' => Ok(Ahom::NumberTwenty),
'𑜼' => Ok(Ahom::SignSmallSection),
'𑜽' => Ok(Ahom::SignSection),
'𑜾' => 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) -> String {
let s = std::format!("Ahom{:#?}", self);
string_morph::to_sentence_case(&s)
}
}