#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Oriya {
SignCandrabindu,
SignAnusvara,
SignVisarga,
LetterA,
LetterAa,
LetterI,
LetterIi,
LetterU,
LetterUu,
LetterVocalicR,
LetterVocalicL,
LetterE,
LetterAi,
LetterO,
LetterAu,
LetterKa,
LetterKha,
LetterGa,
LetterGha,
LetterNga,
LetterCa,
LetterCha,
LetterJa,
LetterJha,
LetterNya,
LetterTta,
LetterTtha,
LetterDda,
LetterDdha,
LetterNna,
LetterTa,
LetterTha,
LetterDa,
LetterDha,
LetterNa,
LetterPa,
LetterPha,
LetterBa,
LetterBha,
LetterMa,
LetterYa,
LetterRa,
LetterLa,
LetterLla,
LetterVa,
LetterSha,
LetterSsa,
LetterSa,
LetterHa,
SignNukta,
SignAvagraha,
VowelSignAa,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignVocalicR,
VowelSignVocalicRr,
VowelSignE,
VowelSignAi,
VowelSignO,
VowelSignAu,
SignVirama,
AiLengthMark,
AuLengthMark,
LetterRra,
LetterRha,
LetterYya,
LetterVocalicRr,
LetterVocalicLl,
VowelSignVocalicL,
VowelSignVocalicLl,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
Isshar,
LetterWa,
FractionOneQuarter,
FractionOneHalf,
FractionThreeQuarters,
FractionOneSixteenth,
FractionOneEighth,
FractionThreeSixteenths,
}
impl Into<char> for Oriya {
fn into(self) -> char {
match self {
Oriya::SignCandrabindu => 'ଁ',
Oriya::SignAnusvara => 'ଂ',
Oriya::SignVisarga => 'ଃ',
Oriya::LetterA => 'ଅ',
Oriya::LetterAa => 'ଆ',
Oriya::LetterI => 'ଇ',
Oriya::LetterIi => 'ଈ',
Oriya::LetterU => 'ଉ',
Oriya::LetterUu => 'ଊ',
Oriya::LetterVocalicR => 'ଋ',
Oriya::LetterVocalicL => 'ଌ',
Oriya::LetterE => 'ଏ',
Oriya::LetterAi => 'ଐ',
Oriya::LetterO => 'ଓ',
Oriya::LetterAu => 'ଔ',
Oriya::LetterKa => 'କ',
Oriya::LetterKha => 'ଖ',
Oriya::LetterGa => 'ଗ',
Oriya::LetterGha => 'ଘ',
Oriya::LetterNga => 'ଙ',
Oriya::LetterCa => 'ଚ',
Oriya::LetterCha => 'ଛ',
Oriya::LetterJa => 'ଜ',
Oriya::LetterJha => 'ଝ',
Oriya::LetterNya => 'ଞ',
Oriya::LetterTta => 'ଟ',
Oriya::LetterTtha => 'ଠ',
Oriya::LetterDda => 'ଡ',
Oriya::LetterDdha => 'ଢ',
Oriya::LetterNna => 'ଣ',
Oriya::LetterTa => 'ତ',
Oriya::LetterTha => 'ଥ',
Oriya::LetterDa => 'ଦ',
Oriya::LetterDha => 'ଧ',
Oriya::LetterNa => 'ନ',
Oriya::LetterPa => 'ପ',
Oriya::LetterPha => 'ଫ',
Oriya::LetterBa => 'ବ',
Oriya::LetterBha => 'ଭ',
Oriya::LetterMa => 'ମ',
Oriya::LetterYa => 'ଯ',
Oriya::LetterRa => 'ର',
Oriya::LetterLa => 'ଲ',
Oriya::LetterLla => 'ଳ',
Oriya::LetterVa => 'ଵ',
Oriya::LetterSha => 'ଶ',
Oriya::LetterSsa => 'ଷ',
Oriya::LetterSa => 'ସ',
Oriya::LetterHa => 'ହ',
Oriya::SignNukta => '଼',
Oriya::SignAvagraha => 'ଽ',
Oriya::VowelSignAa => 'ା',
Oriya::VowelSignI => 'ି',
Oriya::VowelSignIi => 'ୀ',
Oriya::VowelSignU => 'ୁ',
Oriya::VowelSignUu => 'ୂ',
Oriya::VowelSignVocalicR => 'ୃ',
Oriya::VowelSignVocalicRr => 'ୄ',
Oriya::VowelSignE => 'େ',
Oriya::VowelSignAi => 'ୈ',
Oriya::VowelSignO => 'ୋ',
Oriya::VowelSignAu => 'ୌ',
Oriya::SignVirama => '୍',
Oriya::AiLengthMark => 'ୖ',
Oriya::AuLengthMark => 'ୗ',
Oriya::LetterRra => 'ଡ଼',
Oriya::LetterRha => 'ଢ଼',
Oriya::LetterYya => 'ୟ',
Oriya::LetterVocalicRr => 'ୠ',
Oriya::LetterVocalicLl => 'ୡ',
Oriya::VowelSignVocalicL => 'ୢ',
Oriya::VowelSignVocalicLl => 'ୣ',
Oriya::DigitZero => '୦',
Oriya::DigitOne => '୧',
Oriya::DigitTwo => '୨',
Oriya::DigitThree => '୩',
Oriya::DigitFour => '୪',
Oriya::DigitFive => '୫',
Oriya::DigitSix => '୬',
Oriya::DigitSeven => '୭',
Oriya::DigitEight => '୮',
Oriya::DigitNine => '୯',
Oriya::Isshar => '୰',
Oriya::LetterWa => 'ୱ',
Oriya::FractionOneQuarter => '୲',
Oriya::FractionOneHalf => '୳',
Oriya::FractionThreeQuarters => '୴',
Oriya::FractionOneSixteenth => '୵',
Oriya::FractionOneEighth => '୶',
Oriya::FractionThreeSixteenths => '୷',
}
}
}
impl std::convert::TryFrom<char> for Oriya {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'ଁ' => Ok(Oriya::SignCandrabindu),
'ଂ' => Ok(Oriya::SignAnusvara),
'ଃ' => Ok(Oriya::SignVisarga),
'ଅ' => Ok(Oriya::LetterA),
'ଆ' => Ok(Oriya::LetterAa),
'ଇ' => Ok(Oriya::LetterI),
'ଈ' => Ok(Oriya::LetterIi),
'ଉ' => Ok(Oriya::LetterU),
'ଊ' => Ok(Oriya::LetterUu),
'ଋ' => Ok(Oriya::LetterVocalicR),
'ଌ' => Ok(Oriya::LetterVocalicL),
'ଏ' => Ok(Oriya::LetterE),
'ଐ' => Ok(Oriya::LetterAi),
'ଓ' => Ok(Oriya::LetterO),
'ଔ' => Ok(Oriya::LetterAu),
'କ' => Ok(Oriya::LetterKa),
'ଖ' => Ok(Oriya::LetterKha),
'ଗ' => Ok(Oriya::LetterGa),
'ଘ' => Ok(Oriya::LetterGha),
'ଙ' => Ok(Oriya::LetterNga),
'ଚ' => Ok(Oriya::LetterCa),
'ଛ' => Ok(Oriya::LetterCha),
'ଜ' => Ok(Oriya::LetterJa),
'ଝ' => Ok(Oriya::LetterJha),
'ଞ' => Ok(Oriya::LetterNya),
'ଟ' => Ok(Oriya::LetterTta),
'ଠ' => Ok(Oriya::LetterTtha),
'ଡ' => Ok(Oriya::LetterDda),
'ଢ' => Ok(Oriya::LetterDdha),
'ଣ' => Ok(Oriya::LetterNna),
'ତ' => Ok(Oriya::LetterTa),
'ଥ' => Ok(Oriya::LetterTha),
'ଦ' => Ok(Oriya::LetterDa),
'ଧ' => Ok(Oriya::LetterDha),
'ନ' => Ok(Oriya::LetterNa),
'ପ' => Ok(Oriya::LetterPa),
'ଫ' => Ok(Oriya::LetterPha),
'ବ' => Ok(Oriya::LetterBa),
'ଭ' => Ok(Oriya::LetterBha),
'ମ' => Ok(Oriya::LetterMa),
'ଯ' => Ok(Oriya::LetterYa),
'ର' => Ok(Oriya::LetterRa),
'ଲ' => Ok(Oriya::LetterLa),
'ଳ' => Ok(Oriya::LetterLla),
'ଵ' => Ok(Oriya::LetterVa),
'ଶ' => Ok(Oriya::LetterSha),
'ଷ' => Ok(Oriya::LetterSsa),
'ସ' => Ok(Oriya::LetterSa),
'ହ' => Ok(Oriya::LetterHa),
'଼' => Ok(Oriya::SignNukta),
'ଽ' => Ok(Oriya::SignAvagraha),
'ା' => Ok(Oriya::VowelSignAa),
'ି' => Ok(Oriya::VowelSignI),
'ୀ' => Ok(Oriya::VowelSignIi),
'ୁ' => Ok(Oriya::VowelSignU),
'ୂ' => Ok(Oriya::VowelSignUu),
'ୃ' => Ok(Oriya::VowelSignVocalicR),
'ୄ' => Ok(Oriya::VowelSignVocalicRr),
'େ' => Ok(Oriya::VowelSignE),
'ୈ' => Ok(Oriya::VowelSignAi),
'ୋ' => Ok(Oriya::VowelSignO),
'ୌ' => Ok(Oriya::VowelSignAu),
'୍' => Ok(Oriya::SignVirama),
'ୖ' => Ok(Oriya::AiLengthMark),
'ୗ' => Ok(Oriya::AuLengthMark),
'ଡ଼' => Ok(Oriya::LetterRra),
'ଢ଼' => Ok(Oriya::LetterRha),
'ୟ' => Ok(Oriya::LetterYya),
'ୠ' => Ok(Oriya::LetterVocalicRr),
'ୡ' => Ok(Oriya::LetterVocalicLl),
'ୢ' => Ok(Oriya::VowelSignVocalicL),
'ୣ' => Ok(Oriya::VowelSignVocalicLl),
'୦' => Ok(Oriya::DigitZero),
'୧' => Ok(Oriya::DigitOne),
'୨' => Ok(Oriya::DigitTwo),
'୩' => Ok(Oriya::DigitThree),
'୪' => Ok(Oriya::DigitFour),
'୫' => Ok(Oriya::DigitFive),
'୬' => Ok(Oriya::DigitSix),
'୭' => Ok(Oriya::DigitSeven),
'୮' => Ok(Oriya::DigitEight),
'୯' => Ok(Oriya::DigitNine),
'୰' => Ok(Oriya::Isshar),
'ୱ' => Ok(Oriya::LetterWa),
'୲' => Ok(Oriya::FractionOneQuarter),
'୳' => Ok(Oriya::FractionOneHalf),
'୴' => Ok(Oriya::FractionThreeQuarters),
'୵' => Ok(Oriya::FractionOneSixteenth),
'୶' => Ok(Oriya::FractionOneEighth),
'୷' => Ok(Oriya::FractionThreeSixteenths),
_ => Err(()),
}
}
}
impl Into<u32> for Oriya {
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 Oriya {
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 Oriya {
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 Oriya {
pub fn new() -> Self {
Oriya::SignCandrabindu
}
pub fn name(&self) -> String {
let s = std::format!("Oriya{:#?}", self);
string_morph::to_sentence_case(&s)
}
}