#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum DevanagariExtended {
CombiningDevanagariDigitZero,
CombiningDevanagariDigitOne,
CombiningDevanagariDigitTwo,
CombiningDevanagariDigitThree,
CombiningDevanagariDigitFour,
CombiningDevanagariDigitFive,
CombiningDevanagariDigitSix,
CombiningDevanagariDigitSeven,
CombiningDevanagariDigitEight,
CombiningDevanagariDigitNine,
CombiningDevanagariLetterA,
CombiningDevanagariLetterU,
CombiningDevanagariLetterKa,
CombiningDevanagariLetterNa,
CombiningDevanagariLetterPa,
CombiningDevanagariLetterRa,
CombiningDevanagariLetterVi,
CombiningDevanagariSignAvagraha,
DevanagariSignSpacingCandrabindu,
DevanagariSignCandrabinduVirama,
DevanagariSignDoubleCandrabinduVirama,
DevanagariSignCandrabinduTwo,
DevanagariSignCandrabinduThree,
DevanagariSignCandrabinduAvagraha,
DevanagariSignPushpika,
DevanagariGapFiller,
DevanagariCaret,
DevanagariHeadstroke,
DevanagariSignSiddham,
DevanagariJainOm,
DevanagariLetterAy,
}
impl Into<char> for DevanagariExtended {
fn into(self) -> char {
match self {
DevanagariExtended::CombiningDevanagariDigitZero => '꣠',
DevanagariExtended::CombiningDevanagariDigitOne => '꣡',
DevanagariExtended::CombiningDevanagariDigitTwo => '꣢',
DevanagariExtended::CombiningDevanagariDigitThree => '꣣',
DevanagariExtended::CombiningDevanagariDigitFour => '꣤',
DevanagariExtended::CombiningDevanagariDigitFive => '꣥',
DevanagariExtended::CombiningDevanagariDigitSix => '꣦',
DevanagariExtended::CombiningDevanagariDigitSeven => '꣧',
DevanagariExtended::CombiningDevanagariDigitEight => '꣨',
DevanagariExtended::CombiningDevanagariDigitNine => '꣩',
DevanagariExtended::CombiningDevanagariLetterA => '꣪',
DevanagariExtended::CombiningDevanagariLetterU => '꣫',
DevanagariExtended::CombiningDevanagariLetterKa => '꣬',
DevanagariExtended::CombiningDevanagariLetterNa => '꣭',
DevanagariExtended::CombiningDevanagariLetterPa => '꣮',
DevanagariExtended::CombiningDevanagariLetterRa => '꣯',
DevanagariExtended::CombiningDevanagariLetterVi => '꣰',
DevanagariExtended::CombiningDevanagariSignAvagraha => '꣱',
DevanagariExtended::DevanagariSignSpacingCandrabindu => 'ꣲ',
DevanagariExtended::DevanagariSignCandrabinduVirama => 'ꣳ',
DevanagariExtended::DevanagariSignDoubleCandrabinduVirama => 'ꣴ',
DevanagariExtended::DevanagariSignCandrabinduTwo => 'ꣵ',
DevanagariExtended::DevanagariSignCandrabinduThree => 'ꣶ',
DevanagariExtended::DevanagariSignCandrabinduAvagraha => 'ꣷ',
DevanagariExtended::DevanagariSignPushpika => '꣸',
DevanagariExtended::DevanagariGapFiller => '꣹',
DevanagariExtended::DevanagariCaret => '꣺',
DevanagariExtended::DevanagariHeadstroke => 'ꣻ',
DevanagariExtended::DevanagariSignSiddham => '꣼',
DevanagariExtended::DevanagariJainOm => 'ꣽ',
DevanagariExtended::DevanagariLetterAy => 'ꣾ',
}
}
}
impl std::convert::TryFrom<char> for DevanagariExtended {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'꣠' => Ok(DevanagariExtended::CombiningDevanagariDigitZero),
'꣡' => Ok(DevanagariExtended::CombiningDevanagariDigitOne),
'꣢' => Ok(DevanagariExtended::CombiningDevanagariDigitTwo),
'꣣' => Ok(DevanagariExtended::CombiningDevanagariDigitThree),
'꣤' => Ok(DevanagariExtended::CombiningDevanagariDigitFour),
'꣥' => Ok(DevanagariExtended::CombiningDevanagariDigitFive),
'꣦' => Ok(DevanagariExtended::CombiningDevanagariDigitSix),
'꣧' => Ok(DevanagariExtended::CombiningDevanagariDigitSeven),
'꣨' => Ok(DevanagariExtended::CombiningDevanagariDigitEight),
'꣩' => Ok(DevanagariExtended::CombiningDevanagariDigitNine),
'꣪' => Ok(DevanagariExtended::CombiningDevanagariLetterA),
'꣫' => Ok(DevanagariExtended::CombiningDevanagariLetterU),
'꣬' => Ok(DevanagariExtended::CombiningDevanagariLetterKa),
'꣭' => Ok(DevanagariExtended::CombiningDevanagariLetterNa),
'꣮' => Ok(DevanagariExtended::CombiningDevanagariLetterPa),
'꣯' => Ok(DevanagariExtended::CombiningDevanagariLetterRa),
'꣰' => Ok(DevanagariExtended::CombiningDevanagariLetterVi),
'꣱' => Ok(DevanagariExtended::CombiningDevanagariSignAvagraha),
'ꣲ' => Ok(DevanagariExtended::DevanagariSignSpacingCandrabindu),
'ꣳ' => Ok(DevanagariExtended::DevanagariSignCandrabinduVirama),
'ꣴ' => Ok(DevanagariExtended::DevanagariSignDoubleCandrabinduVirama),
'ꣵ' => Ok(DevanagariExtended::DevanagariSignCandrabinduTwo),
'ꣶ' => Ok(DevanagariExtended::DevanagariSignCandrabinduThree),
'ꣷ' => Ok(DevanagariExtended::DevanagariSignCandrabinduAvagraha),
'꣸' => Ok(DevanagariExtended::DevanagariSignPushpika),
'꣹' => Ok(DevanagariExtended::DevanagariGapFiller),
'꣺' => Ok(DevanagariExtended::DevanagariCaret),
'ꣻ' => Ok(DevanagariExtended::DevanagariHeadstroke),
'꣼' => Ok(DevanagariExtended::DevanagariSignSiddham),
'ꣽ' => Ok(DevanagariExtended::DevanagariJainOm),
'ꣾ' => Ok(DevanagariExtended::DevanagariLetterAy),
_ => Err(()),
}
}
}
impl Into<u32> for DevanagariExtended {
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 DevanagariExtended {
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 DevanagariExtended {
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 DevanagariExtended {
pub fn new() -> Self {
DevanagariExtended::CombiningDevanagariDigitZero
}
pub fn name(&self) -> String {
let s = std::format!("DevanagariExtended{:#?}", self);
string_morph::to_sentence_case(&s)
}
}