#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Tamil {
SignAnusvara,
SignVisarga,
LetterA,
LetterAa,
LetterI,
LetterIi,
LetterU,
LetterUu,
LetterE,
LetterEe,
LetterAi,
LetterO,
LetterOo,
LetterAu,
LetterKa,
LetterNga,
LetterCa,
LetterJa,
LetterNya,
LetterTta,
LetterNna,
LetterTa,
LetterNa,
LetterNnna,
LetterPa,
LetterMa,
LetterYa,
LetterRa,
LetterRra,
LetterLa,
LetterLla,
LetterLlla,
LetterVa,
LetterSha,
LetterSsa,
LetterSa,
LetterHa,
VowelSignAa,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignE,
VowelSignEe,
VowelSignAi,
VowelSignO,
VowelSignOo,
VowelSignAu,
SignVirama,
Om,
AuLengthMark,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
NumberTen,
NumberOneHundred,
NumberOneThousand,
DaySign,
MonthSign,
YearSign,
DebitSign,
CreditSign,
AsAboveSign,
RupeeSign,
NumberSign,
}
impl Into<char> for Tamil {
fn into(self) -> char {
match self {
Tamil::SignAnusvara => 'ஂ',
Tamil::SignVisarga => 'ஃ',
Tamil::LetterA => 'அ',
Tamil::LetterAa => 'ஆ',
Tamil::LetterI => 'இ',
Tamil::LetterIi => 'ஈ',
Tamil::LetterU => 'உ',
Tamil::LetterUu => 'ஊ',
Tamil::LetterE => 'எ',
Tamil::LetterEe => 'ஏ',
Tamil::LetterAi => 'ஐ',
Tamil::LetterO => 'ஒ',
Tamil::LetterOo => 'ஓ',
Tamil::LetterAu => 'ஔ',
Tamil::LetterKa => 'க',
Tamil::LetterNga => 'ங',
Tamil::LetterCa => 'ச',
Tamil::LetterJa => 'ஜ',
Tamil::LetterNya => 'ஞ',
Tamil::LetterTta => 'ட',
Tamil::LetterNna => 'ண',
Tamil::LetterTa => 'த',
Tamil::LetterNa => 'ந',
Tamil::LetterNnna => 'ன',
Tamil::LetterPa => 'ப',
Tamil::LetterMa => 'ம',
Tamil::LetterYa => 'ய',
Tamil::LetterRa => 'ர',
Tamil::LetterRra => 'ற',
Tamil::LetterLa => 'ல',
Tamil::LetterLla => 'ள',
Tamil::LetterLlla => 'ழ',
Tamil::LetterVa => 'வ',
Tamil::LetterSha => 'ஶ',
Tamil::LetterSsa => 'ஷ',
Tamil::LetterSa => 'ஸ',
Tamil::LetterHa => 'ஹ',
Tamil::VowelSignAa => 'ா',
Tamil::VowelSignI => 'ி',
Tamil::VowelSignIi => 'ீ',
Tamil::VowelSignU => 'ு',
Tamil::VowelSignUu => 'ூ',
Tamil::VowelSignE => 'ெ',
Tamil::VowelSignEe => 'ே',
Tamil::VowelSignAi => 'ை',
Tamil::VowelSignO => 'ொ',
Tamil::VowelSignOo => 'ோ',
Tamil::VowelSignAu => 'ௌ',
Tamil::SignVirama => '்',
Tamil::Om => 'ௐ',
Tamil::AuLengthMark => 'ௗ',
Tamil::DigitZero => '௦',
Tamil::DigitOne => '௧',
Tamil::DigitTwo => '௨',
Tamil::DigitThree => '௩',
Tamil::DigitFour => '௪',
Tamil::DigitFive => '௫',
Tamil::DigitSix => '௬',
Tamil::DigitSeven => '௭',
Tamil::DigitEight => '௮',
Tamil::DigitNine => '௯',
Tamil::NumberTen => '௰',
Tamil::NumberOneHundred => '௱',
Tamil::NumberOneThousand => '௲',
Tamil::DaySign => '௳',
Tamil::MonthSign => '௴',
Tamil::YearSign => '௵',
Tamil::DebitSign => '௶',
Tamil::CreditSign => '௷',
Tamil::AsAboveSign => '௸',
Tamil::RupeeSign => '௹',
Tamil::NumberSign => '௺',
}
}
}
impl std::convert::TryFrom<char> for Tamil {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'ஂ' => Ok(Tamil::SignAnusvara),
'ஃ' => Ok(Tamil::SignVisarga),
'அ' => Ok(Tamil::LetterA),
'ஆ' => Ok(Tamil::LetterAa),
'இ' => Ok(Tamil::LetterI),
'ஈ' => Ok(Tamil::LetterIi),
'உ' => Ok(Tamil::LetterU),
'ஊ' => Ok(Tamil::LetterUu),
'எ' => Ok(Tamil::LetterE),
'ஏ' => Ok(Tamil::LetterEe),
'ஐ' => Ok(Tamil::LetterAi),
'ஒ' => Ok(Tamil::LetterO),
'ஓ' => Ok(Tamil::LetterOo),
'ஔ' => Ok(Tamil::LetterAu),
'க' => Ok(Tamil::LetterKa),
'ங' => Ok(Tamil::LetterNga),
'ச' => Ok(Tamil::LetterCa),
'ஜ' => Ok(Tamil::LetterJa),
'ஞ' => Ok(Tamil::LetterNya),
'ட' => Ok(Tamil::LetterTta),
'ண' => Ok(Tamil::LetterNna),
'த' => Ok(Tamil::LetterTa),
'ந' => Ok(Tamil::LetterNa),
'ன' => Ok(Tamil::LetterNnna),
'ப' => Ok(Tamil::LetterPa),
'ம' => Ok(Tamil::LetterMa),
'ய' => Ok(Tamil::LetterYa),
'ர' => Ok(Tamil::LetterRa),
'ற' => Ok(Tamil::LetterRra),
'ல' => Ok(Tamil::LetterLa),
'ள' => Ok(Tamil::LetterLla),
'ழ' => Ok(Tamil::LetterLlla),
'வ' => Ok(Tamil::LetterVa),
'ஶ' => Ok(Tamil::LetterSha),
'ஷ' => Ok(Tamil::LetterSsa),
'ஸ' => Ok(Tamil::LetterSa),
'ஹ' => Ok(Tamil::LetterHa),
'ா' => Ok(Tamil::VowelSignAa),
'ி' => Ok(Tamil::VowelSignI),
'ீ' => Ok(Tamil::VowelSignIi),
'ு' => Ok(Tamil::VowelSignU),
'ூ' => Ok(Tamil::VowelSignUu),
'ெ' => Ok(Tamil::VowelSignE),
'ே' => Ok(Tamil::VowelSignEe),
'ை' => Ok(Tamil::VowelSignAi),
'ொ' => Ok(Tamil::VowelSignO),
'ோ' => Ok(Tamil::VowelSignOo),
'ௌ' => Ok(Tamil::VowelSignAu),
'்' => Ok(Tamil::SignVirama),
'ௐ' => Ok(Tamil::Om),
'ௗ' => Ok(Tamil::AuLengthMark),
'௦' => Ok(Tamil::DigitZero),
'௧' => Ok(Tamil::DigitOne),
'௨' => Ok(Tamil::DigitTwo),
'௩' => Ok(Tamil::DigitThree),
'௪' => Ok(Tamil::DigitFour),
'௫' => Ok(Tamil::DigitFive),
'௬' => Ok(Tamil::DigitSix),
'௭' => Ok(Tamil::DigitSeven),
'௮' => Ok(Tamil::DigitEight),
'௯' => Ok(Tamil::DigitNine),
'௰' => Ok(Tamil::NumberTen),
'௱' => Ok(Tamil::NumberOneHundred),
'௲' => Ok(Tamil::NumberOneThousand),
'௳' => Ok(Tamil::DaySign),
'௴' => Ok(Tamil::MonthSign),
'௵' => Ok(Tamil::YearSign),
'௶' => Ok(Tamil::DebitSign),
'௷' => Ok(Tamil::CreditSign),
'௸' => Ok(Tamil::AsAboveSign),
'௹' => Ok(Tamil::RupeeSign),
'௺' => Ok(Tamil::NumberSign),
_ => Err(()),
}
}
}
impl Into<u32> for Tamil {
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 Tamil {
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 Tamil {
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 Tamil {
pub fn new() -> Self {
Tamil::SignAnusvara
}
pub fn name(&self) -> String {
let s = std::format!("Tamil{:#?}", self);
string_morph::to_sentence_case(&s)
}
}