mod constants {
pub const LETTER_TA: char = '𖩀';
pub const LETTER_NGI: char = '𖩁';
pub const LETTER_YO: char = '𖩂';
pub const LETTER_MIM: char = '𖩃';
pub const LETTER_BA: char = '𖩄';
pub const LETTER_DA: char = '𖩅';
pub const LETTER_A: char = '𖩆';
pub const LETTER_PHI: char = '𖩇';
pub const LETTER_KHAI: char = '𖩈';
pub const LETTER_HAO: char = '𖩉';
pub const LETTER_DAI: char = '𖩊';
pub const LETTER_CHU: char = '𖩋';
pub const LETTER_KEAAE: char = '𖩌';
pub const LETTER_OL: char = '𖩍';
pub const LETTER_MAEM: char = '𖩎';
pub const LETTER_NIN: char = '𖩏';
pub const LETTER_PA: char = '𖩐';
pub const LETTER_OO: char = '𖩑';
pub const LETTER_O: char = '𖩒';
pub const LETTER_RO: char = '𖩓';
pub const LETTER_SHI: char = '𖩔';
pub const LETTER_THEA: char = '𖩕';
pub const LETTER_EA: char = '𖩖';
pub const LETTER_WA: char = '𖩗';
pub const LETTER_E: char = '𖩘';
pub const LETTER_KO: char = '𖩙';
pub const LETTER_LAN: char = '𖩚';
pub const LETTER_LA: char = '𖩛';
pub const LETTER_HAI: char = '𖩜';
pub const LETTER_RI: char = '𖩝';
pub const LETTER_TEK: 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 DANDA: char = '𖩮';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Mro {
LetterTa,
LetterNgi,
LetterYo,
LetterMim,
LetterBa,
LetterDa,
LetterA,
LetterPhi,
LetterKhai,
LetterHao,
LetterDai,
LetterChu,
LetterKeaae,
LetterOl,
LetterMaem,
LetterNin,
LetterPa,
LetterOo,
LetterO,
LetterRo,
LetterShi,
LetterThea,
LetterEa,
LetterWa,
LetterE,
LetterKo,
LetterLan,
LetterLa,
LetterHai,
LetterRi,
LetterTek,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
Danda,
}
impl Into<char> for Mro {
fn into(self) -> char {
use constants::*;
match self {
Mro::LetterTa => LETTER_TA,
Mro::LetterNgi => LETTER_NGI,
Mro::LetterYo => LETTER_YO,
Mro::LetterMim => LETTER_MIM,
Mro::LetterBa => LETTER_BA,
Mro::LetterDa => LETTER_DA,
Mro::LetterA => LETTER_A,
Mro::LetterPhi => LETTER_PHI,
Mro::LetterKhai => LETTER_KHAI,
Mro::LetterHao => LETTER_HAO,
Mro::LetterDai => LETTER_DAI,
Mro::LetterChu => LETTER_CHU,
Mro::LetterKeaae => LETTER_KEAAE,
Mro::LetterOl => LETTER_OL,
Mro::LetterMaem => LETTER_MAEM,
Mro::LetterNin => LETTER_NIN,
Mro::LetterPa => LETTER_PA,
Mro::LetterOo => LETTER_OO,
Mro::LetterO => LETTER_O,
Mro::LetterRo => LETTER_RO,
Mro::LetterShi => LETTER_SHI,
Mro::LetterThea => LETTER_THEA,
Mro::LetterEa => LETTER_EA,
Mro::LetterWa => LETTER_WA,
Mro::LetterE => LETTER_E,
Mro::LetterKo => LETTER_KO,
Mro::LetterLan => LETTER_LAN,
Mro::LetterLa => LETTER_LA,
Mro::LetterHai => LETTER_HAI,
Mro::LetterRi => LETTER_RI,
Mro::LetterTek => LETTER_TEK,
Mro::DigitZero => DIGIT_ZERO,
Mro::DigitOne => DIGIT_ONE,
Mro::DigitTwo => DIGIT_TWO,
Mro::DigitThree => DIGIT_THREE,
Mro::DigitFour => DIGIT_FOUR,
Mro::DigitFive => DIGIT_FIVE,
Mro::DigitSix => DIGIT_SIX,
Mro::DigitSeven => DIGIT_SEVEN,
Mro::DigitEight => DIGIT_EIGHT,
Mro::DigitNine => DIGIT_NINE,
Mro::Danda => DANDA,
}
}
}
impl std::convert::TryFrom<char> for Mro {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_TA => Ok(Mro::LetterTa),
LETTER_NGI => Ok(Mro::LetterNgi),
LETTER_YO => Ok(Mro::LetterYo),
LETTER_MIM => Ok(Mro::LetterMim),
LETTER_BA => Ok(Mro::LetterBa),
LETTER_DA => Ok(Mro::LetterDa),
LETTER_A => Ok(Mro::LetterA),
LETTER_PHI => Ok(Mro::LetterPhi),
LETTER_KHAI => Ok(Mro::LetterKhai),
LETTER_HAO => Ok(Mro::LetterHao),
LETTER_DAI => Ok(Mro::LetterDai),
LETTER_CHU => Ok(Mro::LetterChu),
LETTER_KEAAE => Ok(Mro::LetterKeaae),
LETTER_OL => Ok(Mro::LetterOl),
LETTER_MAEM => Ok(Mro::LetterMaem),
LETTER_NIN => Ok(Mro::LetterNin),
LETTER_PA => Ok(Mro::LetterPa),
LETTER_OO => Ok(Mro::LetterOo),
LETTER_O => Ok(Mro::LetterO),
LETTER_RO => Ok(Mro::LetterRo),
LETTER_SHI => Ok(Mro::LetterShi),
LETTER_THEA => Ok(Mro::LetterThea),
LETTER_EA => Ok(Mro::LetterEa),
LETTER_WA => Ok(Mro::LetterWa),
LETTER_E => Ok(Mro::LetterE),
LETTER_KO => Ok(Mro::LetterKo),
LETTER_LAN => Ok(Mro::LetterLan),
LETTER_LA => Ok(Mro::LetterLa),
LETTER_HAI => Ok(Mro::LetterHai),
LETTER_RI => Ok(Mro::LetterRi),
LETTER_TEK => Ok(Mro::LetterTek),
DIGIT_ZERO => Ok(Mro::DigitZero),
DIGIT_ONE => Ok(Mro::DigitOne),
DIGIT_TWO => Ok(Mro::DigitTwo),
DIGIT_THREE => Ok(Mro::DigitThree),
DIGIT_FOUR => Ok(Mro::DigitFour),
DIGIT_FIVE => Ok(Mro::DigitFive),
DIGIT_SIX => Ok(Mro::DigitSix),
DIGIT_SEVEN => Ok(Mro::DigitSeven),
DIGIT_EIGHT => Ok(Mro::DigitEight),
DIGIT_NINE => Ok(Mro::DigitNine),
DANDA => Ok(Mro::Danda),
_ => Err(()),
}
}
}
impl Into<u32> for Mro {
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 Mro {
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 Mro {
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 Mro {
pub fn new() -> Self {
Mro::LetterTa
}
pub fn name(&self) -> &str {
match self {
Mro::LetterTa => "mro letter ta",
Mro::LetterNgi => "mro letter ngi",
Mro::LetterYo => "mro letter yo",
Mro::LetterMim => "mro letter mim",
Mro::LetterBa => "mro letter ba",
Mro::LetterDa => "mro letter da",
Mro::LetterA => "mro letter a",
Mro::LetterPhi => "mro letter phi",
Mro::LetterKhai => "mro letter khai",
Mro::LetterHao => "mro letter hao",
Mro::LetterDai => "mro letter dai",
Mro::LetterChu => "mro letter chu",
Mro::LetterKeaae => "mro letter keaae",
Mro::LetterOl => "mro letter ol",
Mro::LetterMaem => "mro letter maem",
Mro::LetterNin => "mro letter nin",
Mro::LetterPa => "mro letter pa",
Mro::LetterOo => "mro letter oo",
Mro::LetterO => "mro letter o",
Mro::LetterRo => "mro letter ro",
Mro::LetterShi => "mro letter shi",
Mro::LetterThea => "mro letter thea",
Mro::LetterEa => "mro letter ea",
Mro::LetterWa => "mro letter wa",
Mro::LetterE => "mro letter e",
Mro::LetterKo => "mro letter ko",
Mro::LetterLan => "mro letter lan",
Mro::LetterLa => "mro letter la",
Mro::LetterHai => "mro letter hai",
Mro::LetterRi => "mro letter ri",
Mro::LetterTek => "mro letter tek",
Mro::DigitZero => "mro digit zero",
Mro::DigitOne => "mro digit one",
Mro::DigitTwo => "mro digit two",
Mro::DigitThree => "mro digit three",
Mro::DigitFour => "mro digit four",
Mro::DigitFive => "mro digit five",
Mro::DigitSix => "mro digit six",
Mro::DigitSeven => "mro digit seven",
Mro::DigitEight => "mro digit eight",
Mro::DigitNine => "mro digit nine",
Mro::Danda => "mro danda",
}
}
}