#[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 {
match self {
Mro::LetterTa => '𖩀',
Mro::LetterNgi => '𖩁',
Mro::LetterYo => '𖩂',
Mro::LetterMim => '𖩃',
Mro::LetterBa => '𖩄',
Mro::LetterDa => '𖩅',
Mro::LetterA => '𖩆',
Mro::LetterPhi => '𖩇',
Mro::LetterKhai => '𖩈',
Mro::LetterHao => '𖩉',
Mro::LetterDai => '𖩊',
Mro::LetterChu => '𖩋',
Mro::LetterKeaae => '𖩌',
Mro::LetterOl => '𖩍',
Mro::LetterMaem => '𖩎',
Mro::LetterNin => '𖩏',
Mro::LetterPa => '𖩐',
Mro::LetterOo => '𖩑',
Mro::LetterO => '𖩒',
Mro::LetterRo => '𖩓',
Mro::LetterShi => '𖩔',
Mro::LetterThea => '𖩕',
Mro::LetterEa => '𖩖',
Mro::LetterWa => '𖩗',
Mro::LetterE => '𖩘',
Mro::LetterKo => '𖩙',
Mro::LetterLan => '𖩚',
Mro::LetterLa => '𖩛',
Mro::LetterHai => '𖩜',
Mro::LetterRi => '𖩝',
Mro::LetterTek => '𖩞',
Mro::DigitZero => '𖩠',
Mro::DigitOne => '𖩡',
Mro::DigitTwo => '𖩢',
Mro::DigitThree => '𖩣',
Mro::DigitFour => '𖩤',
Mro::DigitFive => '𖩥',
Mro::DigitSix => '𖩦',
Mro::DigitSeven => '𖩧',
Mro::DigitEight => '𖩨',
Mro::DigitNine => '𖩩',
Mro::Danda => '𖩮',
}
}
}
impl std::convert::TryFrom<char> for Mro {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𖩀' => Ok(Mro::LetterTa),
'𖩁' => Ok(Mro::LetterNgi),
'𖩂' => Ok(Mro::LetterYo),
'𖩃' => Ok(Mro::LetterMim),
'𖩄' => Ok(Mro::LetterBa),
'𖩅' => Ok(Mro::LetterDa),
'𖩆' => Ok(Mro::LetterA),
'𖩇' => Ok(Mro::LetterPhi),
'𖩈' => Ok(Mro::LetterKhai),
'𖩉' => Ok(Mro::LetterHao),
'𖩊' => Ok(Mro::LetterDai),
'𖩋' => Ok(Mro::LetterChu),
'𖩌' => Ok(Mro::LetterKeaae),
'𖩍' => Ok(Mro::LetterOl),
'𖩎' => Ok(Mro::LetterMaem),
'𖩏' => Ok(Mro::LetterNin),
'𖩐' => Ok(Mro::LetterPa),
'𖩑' => Ok(Mro::LetterOo),
'𖩒' => Ok(Mro::LetterO),
'𖩓' => Ok(Mro::LetterRo),
'𖩔' => Ok(Mro::LetterShi),
'𖩕' => Ok(Mro::LetterThea),
'𖩖' => Ok(Mro::LetterEa),
'𖩗' => Ok(Mro::LetterWa),
'𖩘' => Ok(Mro::LetterE),
'𖩙' => Ok(Mro::LetterKo),
'𖩚' => Ok(Mro::LetterLan),
'𖩛' => Ok(Mro::LetterLa),
'𖩜' => Ok(Mro::LetterHai),
'𖩝' => Ok(Mro::LetterRi),
'𖩞' => Ok(Mro::LetterTek),
'𖩠' => Ok(Mro::DigitZero),
'𖩡' => Ok(Mro::DigitOne),
'𖩢' => Ok(Mro::DigitTwo),
'𖩣' => Ok(Mro::DigitThree),
'𖩤' => Ok(Mro::DigitFour),
'𖩥' => Ok(Mro::DigitFive),
'𖩦' => Ok(Mro::DigitSix),
'𖩧' => Ok(Mro::DigitSeven),
'𖩨' => Ok(Mro::DigitEight),
'𖩩' => Ok(Mro::DigitNine),
'𖩮' => 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) -> String {
let s = std::format!("Mro{:#?}", self);
string_morph::to_sentence_case(&s)
}
}