mod constants {
pub const LETTER_HAA: char = 'ހ';
pub const LETTER_SHAVIYANI: char = 'ށ';
pub const LETTER_NOONU: char = 'ނ';
pub const LETTER_RAA: char = 'ރ';
pub const LETTER_BAA: char = 'ބ';
pub const LETTER_LHAVIYANI: char = 'ޅ';
pub const LETTER_KAAFU: char = 'ކ';
pub const LETTER_ALIFU: char = 'އ';
pub const LETTER_VAAVU: char = 'ވ';
pub const LETTER_MEEMU: char = 'މ';
pub const LETTER_FAAFU: char = 'ފ';
pub const LETTER_DHAALU: char = 'ދ';
pub const LETTER_THAA: char = 'ތ';
pub const LETTER_LAAMU: char = 'ލ';
pub const LETTER_GAAFU: char = 'ގ';
pub const LETTER_GNAVIYANI: char = 'ޏ';
pub const LETTER_SEENU: char = 'ސ';
pub const LETTER_DAVIYANI: char = 'ޑ';
pub const LETTER_ZAVIYANI: char = 'ޒ';
pub const LETTER_TAVIYANI: char = 'ޓ';
pub const LETTER_YAA: char = 'ޔ';
pub const LETTER_PAVIYANI: char = 'ޕ';
pub const LETTER_JAVIYANI: char = 'ޖ';
pub const LETTER_CHAVIYANI: char = 'ޗ';
pub const LETTER_TTAA: char = 'ޘ';
pub const LETTER_HHAA: char = 'ޙ';
pub const LETTER_KHAA: char = 'ޚ';
pub const LETTER_THAALU: char = 'ޛ';
pub const LETTER_ZAA: char = 'ޜ';
pub const LETTER_SHEENU: char = 'ޝ';
pub const LETTER_SAADHU: char = 'ޞ';
pub const LETTER_DAADHU: char = 'ޟ';
pub const LETTER_TO: char = 'ޠ';
pub const LETTER_ZO: char = 'ޡ';
pub const LETTER_AINU: char = 'ޢ';
pub const LETTER_GHAINU: char = 'ޣ';
pub const LETTER_QAAFU: char = 'ޤ';
pub const LETTER_WAAVU: char = 'ޥ';
pub const ABAFILI: char = 'ަ';
pub const AABAAFILI: char = 'ާ';
pub const IBIFILI: char = 'ި';
pub const EEBEEFILI: char = 'ީ';
pub const UBUFILI: char = 'ު';
pub const OOBOOFILI: char = 'ޫ';
pub const EBEFILI: char = 'ެ';
pub const EYBEYFILI: char = 'ޭ';
pub const OBOFILI: char = 'ޮ';
pub const OABOAFILI: char = 'ޯ';
pub const SUKUN: char = 'ް';
pub const LETTER_NAA: char = 'ޱ';
}
#[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 {
use constants::*;
match self {
Thaana::LetterHaa => LETTER_HAA,
Thaana::LetterShaviyani => LETTER_SHAVIYANI,
Thaana::LetterNoonu => LETTER_NOONU,
Thaana::LetterRaa => LETTER_RAA,
Thaana::LetterBaa => LETTER_BAA,
Thaana::LetterLhaviyani => LETTER_LHAVIYANI,
Thaana::LetterKaafu => LETTER_KAAFU,
Thaana::LetterAlifu => LETTER_ALIFU,
Thaana::LetterVaavu => LETTER_VAAVU,
Thaana::LetterMeemu => LETTER_MEEMU,
Thaana::LetterFaafu => LETTER_FAAFU,
Thaana::LetterDhaalu => LETTER_DHAALU,
Thaana::LetterThaa => LETTER_THAA,
Thaana::LetterLaamu => LETTER_LAAMU,
Thaana::LetterGaafu => LETTER_GAAFU,
Thaana::LetterGnaviyani => LETTER_GNAVIYANI,
Thaana::LetterSeenu => LETTER_SEENU,
Thaana::LetterDaviyani => LETTER_DAVIYANI,
Thaana::LetterZaviyani => LETTER_ZAVIYANI,
Thaana::LetterTaviyani => LETTER_TAVIYANI,
Thaana::LetterYaa => LETTER_YAA,
Thaana::LetterPaviyani => LETTER_PAVIYANI,
Thaana::LetterJaviyani => LETTER_JAVIYANI,
Thaana::LetterChaviyani => LETTER_CHAVIYANI,
Thaana::LetterTtaa => LETTER_TTAA,
Thaana::LetterHhaa => LETTER_HHAA,
Thaana::LetterKhaa => LETTER_KHAA,
Thaana::LetterThaalu => LETTER_THAALU,
Thaana::LetterZaa => LETTER_ZAA,
Thaana::LetterSheenu => LETTER_SHEENU,
Thaana::LetterSaadhu => LETTER_SAADHU,
Thaana::LetterDaadhu => LETTER_DAADHU,
Thaana::LetterTo => LETTER_TO,
Thaana::LetterZo => LETTER_ZO,
Thaana::LetterAinu => LETTER_AINU,
Thaana::LetterGhainu => LETTER_GHAINU,
Thaana::LetterQaafu => LETTER_QAAFU,
Thaana::LetterWaavu => LETTER_WAAVU,
Thaana::Abafili => ABAFILI,
Thaana::Aabaafili => AABAAFILI,
Thaana::Ibifili => IBIFILI,
Thaana::Eebeefili => EEBEEFILI,
Thaana::Ubufili => UBUFILI,
Thaana::Ooboofili => OOBOOFILI,
Thaana::Ebefili => EBEFILI,
Thaana::Eybeyfili => EYBEYFILI,
Thaana::Obofili => OBOFILI,
Thaana::Oaboafili => OABOAFILI,
Thaana::Sukun => SUKUN,
Thaana::LetterNaa => LETTER_NAA,
}
}
}
impl std::convert::TryFrom<char> for Thaana {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_HAA => Ok(Thaana::LetterHaa),
LETTER_SHAVIYANI => Ok(Thaana::LetterShaviyani),
LETTER_NOONU => Ok(Thaana::LetterNoonu),
LETTER_RAA => Ok(Thaana::LetterRaa),
LETTER_BAA => Ok(Thaana::LetterBaa),
LETTER_LHAVIYANI => Ok(Thaana::LetterLhaviyani),
LETTER_KAAFU => Ok(Thaana::LetterKaafu),
LETTER_ALIFU => Ok(Thaana::LetterAlifu),
LETTER_VAAVU => Ok(Thaana::LetterVaavu),
LETTER_MEEMU => Ok(Thaana::LetterMeemu),
LETTER_FAAFU => Ok(Thaana::LetterFaafu),
LETTER_DHAALU => Ok(Thaana::LetterDhaalu),
LETTER_THAA => Ok(Thaana::LetterThaa),
LETTER_LAAMU => Ok(Thaana::LetterLaamu),
LETTER_GAAFU => Ok(Thaana::LetterGaafu),
LETTER_GNAVIYANI => Ok(Thaana::LetterGnaviyani),
LETTER_SEENU => Ok(Thaana::LetterSeenu),
LETTER_DAVIYANI => Ok(Thaana::LetterDaviyani),
LETTER_ZAVIYANI => Ok(Thaana::LetterZaviyani),
LETTER_TAVIYANI => Ok(Thaana::LetterTaviyani),
LETTER_YAA => Ok(Thaana::LetterYaa),
LETTER_PAVIYANI => Ok(Thaana::LetterPaviyani),
LETTER_JAVIYANI => Ok(Thaana::LetterJaviyani),
LETTER_CHAVIYANI => Ok(Thaana::LetterChaviyani),
LETTER_TTAA => Ok(Thaana::LetterTtaa),
LETTER_HHAA => Ok(Thaana::LetterHhaa),
LETTER_KHAA => Ok(Thaana::LetterKhaa),
LETTER_THAALU => Ok(Thaana::LetterThaalu),
LETTER_ZAA => Ok(Thaana::LetterZaa),
LETTER_SHEENU => Ok(Thaana::LetterSheenu),
LETTER_SAADHU => Ok(Thaana::LetterSaadhu),
LETTER_DAADHU => Ok(Thaana::LetterDaadhu),
LETTER_TO => Ok(Thaana::LetterTo),
LETTER_ZO => Ok(Thaana::LetterZo),
LETTER_AINU => Ok(Thaana::LetterAinu),
LETTER_GHAINU => Ok(Thaana::LetterGhainu),
LETTER_QAAFU => Ok(Thaana::LetterQaafu),
LETTER_WAAVU => Ok(Thaana::LetterWaavu),
ABAFILI => Ok(Thaana::Abafili),
AABAAFILI => Ok(Thaana::Aabaafili),
IBIFILI => Ok(Thaana::Ibifili),
EEBEEFILI => Ok(Thaana::Eebeefili),
UBUFILI => Ok(Thaana::Ubufili),
OOBOOFILI => Ok(Thaana::Ooboofili),
EBEFILI => Ok(Thaana::Ebefili),
EYBEYFILI => Ok(Thaana::Eybeyfili),
OBOFILI => Ok(Thaana::Obofili),
OABOAFILI => Ok(Thaana::Oaboafili),
SUKUN => Ok(Thaana::Sukun),
LETTER_NAA => 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) -> &str {
match self {
Thaana::LetterHaa => "thaana letter haa",
Thaana::LetterShaviyani => "thaana letter shaviyani",
Thaana::LetterNoonu => "thaana letter noonu",
Thaana::LetterRaa => "thaana letter raa",
Thaana::LetterBaa => "thaana letter baa",
Thaana::LetterLhaviyani => "thaana letter lhaviyani",
Thaana::LetterKaafu => "thaana letter kaafu",
Thaana::LetterAlifu => "thaana letter alifu",
Thaana::LetterVaavu => "thaana letter vaavu",
Thaana::LetterMeemu => "thaana letter meemu",
Thaana::LetterFaafu => "thaana letter faafu",
Thaana::LetterDhaalu => "thaana letter dhaalu",
Thaana::LetterThaa => "thaana letter thaa",
Thaana::LetterLaamu => "thaana letter laamu",
Thaana::LetterGaafu => "thaana letter gaafu",
Thaana::LetterGnaviyani => "thaana letter gnaviyani",
Thaana::LetterSeenu => "thaana letter seenu",
Thaana::LetterDaviyani => "thaana letter daviyani",
Thaana::LetterZaviyani => "thaana letter zaviyani",
Thaana::LetterTaviyani => "thaana letter taviyani",
Thaana::LetterYaa => "thaana letter yaa",
Thaana::LetterPaviyani => "thaana letter paviyani",
Thaana::LetterJaviyani => "thaana letter javiyani",
Thaana::LetterChaviyani => "thaana letter chaviyani",
Thaana::LetterTtaa => "thaana letter ttaa",
Thaana::LetterHhaa => "thaana letter hhaa",
Thaana::LetterKhaa => "thaana letter khaa",
Thaana::LetterThaalu => "thaana letter thaalu",
Thaana::LetterZaa => "thaana letter zaa",
Thaana::LetterSheenu => "thaana letter sheenu",
Thaana::LetterSaadhu => "thaana letter saadhu",
Thaana::LetterDaadhu => "thaana letter daadhu",
Thaana::LetterTo => "thaana letter to",
Thaana::LetterZo => "thaana letter zo",
Thaana::LetterAinu => "thaana letter ainu",
Thaana::LetterGhainu => "thaana letter ghainu",
Thaana::LetterQaafu => "thaana letter qaafu",
Thaana::LetterWaavu => "thaana letter waavu",
Thaana::Abafili => "thaana abafili",
Thaana::Aabaafili => "thaana aabaafili",
Thaana::Ibifili => "thaana ibifili",
Thaana::Eebeefili => "thaana eebeefili",
Thaana::Ubufili => "thaana ubufili",
Thaana::Ooboofili => "thaana ooboofili",
Thaana::Ebefili => "thaana ebefili",
Thaana::Eybeyfili => "thaana eybeyfili",
Thaana::Obofili => "thaana obofili",
Thaana::Oaboafili => "thaana oaboafili",
Thaana::Sukun => "thaana sukun",
Thaana::LetterNaa => "thaana letter naa",
}
}
}