#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Thaana {
LetterHaa,
LetterShaviyani,
LetterNoonu,
LetterRaa,
LetterBaa,
LetterLhaviyani,
LetterKaafu,
LetterAlifu,
LetterVaavu,
LetterMeemu,
LetterFaafu,
LetterDhaalu,
LetterThaa,
LetterLaamu,
LetterGaafu,
LetterGnaviyani,
LetterSeenu,
LetterDaviyani,
LetterZaviyani,
LetterTaviyani,
LetterYaa,
LetterPaviyani,
LetterJaviyani,
LetterChaviyani,
LetterTtaa,
LetterHhaa,
LetterKhaa,
LetterThaalu,
LetterZaa,
LetterSheenu,
LetterSaadhu,
LetterDaadhu,
LetterTo,
LetterZo,
LetterAinu,
LetterGhainu,
LetterQaafu,
LetterWaavu,
Abafili,
Aabaafili,
Ibifili,
Eebeefili,
Ubufili,
Ooboofili,
Ebefili,
Eybeyfili,
Obofili,
Oaboafili,
Sukun,
LetterNaa,
}
impl Into<char> for Thaana {
fn into(self) -> char {
match self {
Thaana::LetterHaa => 'ހ',
Thaana::LetterShaviyani => 'ށ',
Thaana::LetterNoonu => 'ނ',
Thaana::LetterRaa => 'ރ',
Thaana::LetterBaa => 'ބ',
Thaana::LetterLhaviyani => 'ޅ',
Thaana::LetterKaafu => 'ކ',
Thaana::LetterAlifu => 'އ',
Thaana::LetterVaavu => 'ވ',
Thaana::LetterMeemu => 'މ',
Thaana::LetterFaafu => 'ފ',
Thaana::LetterDhaalu => 'ދ',
Thaana::LetterThaa => 'ތ',
Thaana::LetterLaamu => 'ލ',
Thaana::LetterGaafu => 'ގ',
Thaana::LetterGnaviyani => 'ޏ',
Thaana::LetterSeenu => 'ސ',
Thaana::LetterDaviyani => 'ޑ',
Thaana::LetterZaviyani => 'ޒ',
Thaana::LetterTaviyani => 'ޓ',
Thaana::LetterYaa => 'ޔ',
Thaana::LetterPaviyani => 'ޕ',
Thaana::LetterJaviyani => 'ޖ',
Thaana::LetterChaviyani => 'ޗ',
Thaana::LetterTtaa => 'ޘ',
Thaana::LetterHhaa => 'ޙ',
Thaana::LetterKhaa => 'ޚ',
Thaana::LetterThaalu => 'ޛ',
Thaana::LetterZaa => 'ޜ',
Thaana::LetterSheenu => 'ޝ',
Thaana::LetterSaadhu => 'ޞ',
Thaana::LetterDaadhu => 'ޟ',
Thaana::LetterTo => 'ޠ',
Thaana::LetterZo => 'ޡ',
Thaana::LetterAinu => 'ޢ',
Thaana::LetterGhainu => 'ޣ',
Thaana::LetterQaafu => 'ޤ',
Thaana::LetterWaavu => 'ޥ',
Thaana::Abafili => 'ަ',
Thaana::Aabaafili => 'ާ',
Thaana::Ibifili => 'ި',
Thaana::Eebeefili => 'ީ',
Thaana::Ubufili => 'ު',
Thaana::Ooboofili => 'ޫ',
Thaana::Ebefili => 'ެ',
Thaana::Eybeyfili => 'ޭ',
Thaana::Obofili => 'ޮ',
Thaana::Oaboafili => 'ޯ',
Thaana::Sukun => 'ް',
Thaana::LetterNaa => 'ޱ',
}
}
}
impl std::convert::TryFrom<char> for Thaana {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'ހ' => Ok(Thaana::LetterHaa),
'ށ' => Ok(Thaana::LetterShaviyani),
'ނ' => Ok(Thaana::LetterNoonu),
'ރ' => Ok(Thaana::LetterRaa),
'ބ' => Ok(Thaana::LetterBaa),
'ޅ' => Ok(Thaana::LetterLhaviyani),
'ކ' => Ok(Thaana::LetterKaafu),
'އ' => Ok(Thaana::LetterAlifu),
'ވ' => Ok(Thaana::LetterVaavu),
'މ' => Ok(Thaana::LetterMeemu),
'ފ' => Ok(Thaana::LetterFaafu),
'ދ' => Ok(Thaana::LetterDhaalu),
'ތ' => Ok(Thaana::LetterThaa),
'ލ' => Ok(Thaana::LetterLaamu),
'ގ' => Ok(Thaana::LetterGaafu),
'ޏ' => Ok(Thaana::LetterGnaviyani),
'ސ' => Ok(Thaana::LetterSeenu),
'ޑ' => Ok(Thaana::LetterDaviyani),
'ޒ' => Ok(Thaana::LetterZaviyani),
'ޓ' => Ok(Thaana::LetterTaviyani),
'ޔ' => Ok(Thaana::LetterYaa),
'ޕ' => Ok(Thaana::LetterPaviyani),
'ޖ' => Ok(Thaana::LetterJaviyani),
'ޗ' => Ok(Thaana::LetterChaviyani),
'ޘ' => Ok(Thaana::LetterTtaa),
'ޙ' => Ok(Thaana::LetterHhaa),
'ޚ' => Ok(Thaana::LetterKhaa),
'ޛ' => Ok(Thaana::LetterThaalu),
'ޜ' => Ok(Thaana::LetterZaa),
'ޝ' => Ok(Thaana::LetterSheenu),
'ޞ' => Ok(Thaana::LetterSaadhu),
'ޟ' => Ok(Thaana::LetterDaadhu),
'ޠ' => Ok(Thaana::LetterTo),
'ޡ' => Ok(Thaana::LetterZo),
'ޢ' => Ok(Thaana::LetterAinu),
'ޣ' => Ok(Thaana::LetterGhainu),
'ޤ' => Ok(Thaana::LetterQaafu),
'ޥ' => Ok(Thaana::LetterWaavu),
'ަ' => Ok(Thaana::Abafili),
'ާ' => Ok(Thaana::Aabaafili),
'ި' => Ok(Thaana::Ibifili),
'ީ' => Ok(Thaana::Eebeefili),
'ު' => Ok(Thaana::Ubufili),
'ޫ' => Ok(Thaana::Ooboofili),
'ެ' => Ok(Thaana::Ebefili),
'ޭ' => Ok(Thaana::Eybeyfili),
'ޮ' => Ok(Thaana::Obofili),
'ޯ' => Ok(Thaana::Oaboafili),
'ް' => Ok(Thaana::Sukun),
'ޱ' => Ok(Thaana::LetterNaa),
_ => Err(()),
}
}
}
impl Into<u32> for Thaana {
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 Thaana {
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 Thaana {
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 Thaana {
pub fn new() -> Self {
Thaana::LetterHaa
}
pub fn name(&self) -> String {
let s = std::format!("Thaana{:#?}", self);
string_morph::to_sentence_case(&s)
}
}