#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Bengali {
Anji,
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,
LetterSha,
LetterSsa,
LetterSa,
LetterHa,
SignNukta,
SignAvagraha,
VowelSignAa,
VowelSignI,
VowelSignIi,
VowelSignU,
VowelSignUu,
VowelSignVocalicR,
VowelSignVocalicRr,
VowelSignE,
VowelSignAi,
VowelSignO,
VowelSignAu,
SignVirama,
LetterKhandaTa,
AuLengthMark,
LetterRra,
LetterRha,
LetterYya,
LetterVocalicRr,
LetterVocalicLl,
VowelSignVocalicL,
VowelSignVocalicLl,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
LetterRaWithMiddleDiagonal,
LetterRaWithLowerDiagonal,
RupeeMark,
RupeeSign,
CurrencyNumeratorOne,
CurrencyNumeratorTwo,
CurrencyNumeratorThree,
CurrencyNumeratorFour,
CurrencyNumeratorOneLessThanTheDenominator,
CurrencyDenominatorSixteen,
Isshar,
GandaMark,
LetterVedicAnusvara,
AbbreviationSign,
SandhiMark,
}
impl Into<char> for Bengali {
fn into(self) -> char {
match self {
Bengali::Anji => 'ঀ',
Bengali::SignCandrabindu => 'ঁ',
Bengali::SignAnusvara => 'ং',
Bengali::SignVisarga => 'ঃ',
Bengali::LetterA => 'অ',
Bengali::LetterAa => 'আ',
Bengali::LetterI => 'ই',
Bengali::LetterIi => 'ঈ',
Bengali::LetterU => 'উ',
Bengali::LetterUu => 'ঊ',
Bengali::LetterVocalicR => 'ঋ',
Bengali::LetterVocalicL => 'ঌ',
Bengali::LetterE => 'এ',
Bengali::LetterAi => 'ঐ',
Bengali::LetterO => 'ও',
Bengali::LetterAu => 'ঔ',
Bengali::LetterKa => 'ক',
Bengali::LetterKha => 'খ',
Bengali::LetterGa => 'গ',
Bengali::LetterGha => 'ঘ',
Bengali::LetterNga => 'ঙ',
Bengali::LetterCa => 'চ',
Bengali::LetterCha => 'ছ',
Bengali::LetterJa => 'জ',
Bengali::LetterJha => 'ঝ',
Bengali::LetterNya => 'ঞ',
Bengali::LetterTta => 'ট',
Bengali::LetterTtha => 'ঠ',
Bengali::LetterDda => 'ড',
Bengali::LetterDdha => 'ঢ',
Bengali::LetterNna => 'ণ',
Bengali::LetterTa => 'ত',
Bengali::LetterTha => 'থ',
Bengali::LetterDa => 'দ',
Bengali::LetterDha => 'ধ',
Bengali::LetterNa => 'ন',
Bengali::LetterPa => 'প',
Bengali::LetterPha => 'ফ',
Bengali::LetterBa => 'ব',
Bengali::LetterBha => 'ভ',
Bengali::LetterMa => 'ম',
Bengali::LetterYa => 'য',
Bengali::LetterRa => 'র',
Bengali::LetterLa => 'ল',
Bengali::LetterSha => 'শ',
Bengali::LetterSsa => 'ষ',
Bengali::LetterSa => 'স',
Bengali::LetterHa => 'হ',
Bengali::SignNukta => '়',
Bengali::SignAvagraha => 'ঽ',
Bengali::VowelSignAa => 'া',
Bengali::VowelSignI => 'ি',
Bengali::VowelSignIi => 'ী',
Bengali::VowelSignU => 'ু',
Bengali::VowelSignUu => 'ূ',
Bengali::VowelSignVocalicR => 'ৃ',
Bengali::VowelSignVocalicRr => 'ৄ',
Bengali::VowelSignE => 'ে',
Bengali::VowelSignAi => 'ৈ',
Bengali::VowelSignO => 'ো',
Bengali::VowelSignAu => 'ৌ',
Bengali::SignVirama => '্',
Bengali::LetterKhandaTa => 'ৎ',
Bengali::AuLengthMark => 'ৗ',
Bengali::LetterRra => 'ড়',
Bengali::LetterRha => 'ঢ়',
Bengali::LetterYya => 'য়',
Bengali::LetterVocalicRr => 'ৠ',
Bengali::LetterVocalicLl => 'ৡ',
Bengali::VowelSignVocalicL => 'ৢ',
Bengali::VowelSignVocalicLl => 'ৣ',
Bengali::DigitZero => '০',
Bengali::DigitOne => '১',
Bengali::DigitTwo => '২',
Bengali::DigitThree => '৩',
Bengali::DigitFour => '৪',
Bengali::DigitFive => '৫',
Bengali::DigitSix => '৬',
Bengali::DigitSeven => '৭',
Bengali::DigitEight => '৮',
Bengali::DigitNine => '৯',
Bengali::LetterRaWithMiddleDiagonal => 'ৰ',
Bengali::LetterRaWithLowerDiagonal => 'ৱ',
Bengali::RupeeMark => '৲',
Bengali::RupeeSign => '৳',
Bengali::CurrencyNumeratorOne => '৴',
Bengali::CurrencyNumeratorTwo => '৵',
Bengali::CurrencyNumeratorThree => '৶',
Bengali::CurrencyNumeratorFour => '৷',
Bengali::CurrencyNumeratorOneLessThanTheDenominator => '৸',
Bengali::CurrencyDenominatorSixteen => '৹',
Bengali::Isshar => '৺',
Bengali::GandaMark => '৻',
Bengali::LetterVedicAnusvara => 'ৼ',
Bengali::AbbreviationSign => '৽',
Bengali::SandhiMark => '৾',
}
}
}
impl std::convert::TryFrom<char> for Bengali {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'ঀ' => Ok(Bengali::Anji),
'ঁ' => Ok(Bengali::SignCandrabindu),
'ং' => Ok(Bengali::SignAnusvara),
'ঃ' => Ok(Bengali::SignVisarga),
'অ' => Ok(Bengali::LetterA),
'আ' => Ok(Bengali::LetterAa),
'ই' => Ok(Bengali::LetterI),
'ঈ' => Ok(Bengali::LetterIi),
'উ' => Ok(Bengali::LetterU),
'ঊ' => Ok(Bengali::LetterUu),
'ঋ' => Ok(Bengali::LetterVocalicR),
'ঌ' => Ok(Bengali::LetterVocalicL),
'এ' => Ok(Bengali::LetterE),
'ঐ' => Ok(Bengali::LetterAi),
'ও' => Ok(Bengali::LetterO),
'ঔ' => Ok(Bengali::LetterAu),
'ক' => Ok(Bengali::LetterKa),
'খ' => Ok(Bengali::LetterKha),
'গ' => Ok(Bengali::LetterGa),
'ঘ' => Ok(Bengali::LetterGha),
'ঙ' => Ok(Bengali::LetterNga),
'চ' => Ok(Bengali::LetterCa),
'ছ' => Ok(Bengali::LetterCha),
'জ' => Ok(Bengali::LetterJa),
'ঝ' => Ok(Bengali::LetterJha),
'ঞ' => Ok(Bengali::LetterNya),
'ট' => Ok(Bengali::LetterTta),
'ঠ' => Ok(Bengali::LetterTtha),
'ড' => Ok(Bengali::LetterDda),
'ঢ' => Ok(Bengali::LetterDdha),
'ণ' => Ok(Bengali::LetterNna),
'ত' => Ok(Bengali::LetterTa),
'থ' => Ok(Bengali::LetterTha),
'দ' => Ok(Bengali::LetterDa),
'ধ' => Ok(Bengali::LetterDha),
'ন' => Ok(Bengali::LetterNa),
'প' => Ok(Bengali::LetterPa),
'ফ' => Ok(Bengali::LetterPha),
'ব' => Ok(Bengali::LetterBa),
'ভ' => Ok(Bengali::LetterBha),
'ম' => Ok(Bengali::LetterMa),
'য' => Ok(Bengali::LetterYa),
'র' => Ok(Bengali::LetterRa),
'ল' => Ok(Bengali::LetterLa),
'শ' => Ok(Bengali::LetterSha),
'ষ' => Ok(Bengali::LetterSsa),
'স' => Ok(Bengali::LetterSa),
'হ' => Ok(Bengali::LetterHa),
'়' => Ok(Bengali::SignNukta),
'ঽ' => Ok(Bengali::SignAvagraha),
'া' => Ok(Bengali::VowelSignAa),
'ি' => Ok(Bengali::VowelSignI),
'ী' => Ok(Bengali::VowelSignIi),
'ু' => Ok(Bengali::VowelSignU),
'ূ' => Ok(Bengali::VowelSignUu),
'ৃ' => Ok(Bengali::VowelSignVocalicR),
'ৄ' => Ok(Bengali::VowelSignVocalicRr),
'ে' => Ok(Bengali::VowelSignE),
'ৈ' => Ok(Bengali::VowelSignAi),
'ো' => Ok(Bengali::VowelSignO),
'ৌ' => Ok(Bengali::VowelSignAu),
'্' => Ok(Bengali::SignVirama),
'ৎ' => Ok(Bengali::LetterKhandaTa),
'ৗ' => Ok(Bengali::AuLengthMark),
'ড়' => Ok(Bengali::LetterRra),
'ঢ়' => Ok(Bengali::LetterRha),
'য়' => Ok(Bengali::LetterYya),
'ৠ' => Ok(Bengali::LetterVocalicRr),
'ৡ' => Ok(Bengali::LetterVocalicLl),
'ৢ' => Ok(Bengali::VowelSignVocalicL),
'ৣ' => Ok(Bengali::VowelSignVocalicLl),
'০' => Ok(Bengali::DigitZero),
'১' => Ok(Bengali::DigitOne),
'২' => Ok(Bengali::DigitTwo),
'৩' => Ok(Bengali::DigitThree),
'৪' => Ok(Bengali::DigitFour),
'৫' => Ok(Bengali::DigitFive),
'৬' => Ok(Bengali::DigitSix),
'৭' => Ok(Bengali::DigitSeven),
'৮' => Ok(Bengali::DigitEight),
'৯' => Ok(Bengali::DigitNine),
'ৰ' => Ok(Bengali::LetterRaWithMiddleDiagonal),
'ৱ' => Ok(Bengali::LetterRaWithLowerDiagonal),
'৲' => Ok(Bengali::RupeeMark),
'৳' => Ok(Bengali::RupeeSign),
'৴' => Ok(Bengali::CurrencyNumeratorOne),
'৵' => Ok(Bengali::CurrencyNumeratorTwo),
'৶' => Ok(Bengali::CurrencyNumeratorThree),
'৷' => Ok(Bengali::CurrencyNumeratorFour),
'৸' => Ok(Bengali::CurrencyNumeratorOneLessThanTheDenominator),
'৹' => Ok(Bengali::CurrencyDenominatorSixteen),
'৺' => Ok(Bengali::Isshar),
'৻' => Ok(Bengali::GandaMark),
'ৼ' => Ok(Bengali::LetterVedicAnusvara),
'৽' => Ok(Bengali::AbbreviationSign),
'৾' => Ok(Bengali::SandhiMark),
_ => Err(()),
}
}
}
impl Into<u32> for Bengali {
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 Bengali {
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 Bengali {
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 Bengali {
pub fn new() -> Self {
Bengali::Anji
}
pub fn name(&self) -> String {
let s = std::format!("Bengali{:#?}", self);
string_morph::to_sentence_case(&s)
}
}