#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Limbu {
VowelDashCarrierLetter,
LetterKa,
LetterKha,
LetterGa,
LetterGha,
LetterNga,
LetterCa,
LetterCha,
LetterJa,
LetterJha,
LetterYan,
LetterTa,
LetterTha,
LetterDa,
LetterDha,
LetterNa,
LetterPa,
LetterPha,
LetterBa,
LetterBha,
LetterMa,
LetterYa,
LetterRa,
LetterLa,
LetterWa,
LetterSha,
LetterSsa,
LetterSa,
LetterHa,
LetterGyan,
LetterTra,
VowelSignA,
VowelSignI,
VowelSignU,
VowelSignEe,
VowelSignAi,
VowelSignOo,
VowelSignAu,
VowelSignE,
VowelSignO,
SubjoinedLetterYa,
SubjoinedLetterRa,
SubjoinedLetterWa,
SmallLetterKa,
SmallLetterNga,
SmallLetterAnusvara,
SmallLetterTa,
SmallLetterNa,
SmallLetterPa,
SmallLetterMa,
SmallLetterRa,
SmallLetterLa,
SignMukphreng,
SignKemphreng,
SignSaDashI,
SignLoo,
ExclamationMark,
QuestionMark,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
}
impl Into<char> for Limbu {
fn into(self) -> char {
match self {
Limbu::VowelDashCarrierLetter => 'ᤀ',
Limbu::LetterKa => 'ᤁ',
Limbu::LetterKha => 'ᤂ',
Limbu::LetterGa => 'ᤃ',
Limbu::LetterGha => 'ᤄ',
Limbu::LetterNga => 'ᤅ',
Limbu::LetterCa => 'ᤆ',
Limbu::LetterCha => 'ᤇ',
Limbu::LetterJa => 'ᤈ',
Limbu::LetterJha => 'ᤉ',
Limbu::LetterYan => 'ᤊ',
Limbu::LetterTa => 'ᤋ',
Limbu::LetterTha => 'ᤌ',
Limbu::LetterDa => 'ᤍ',
Limbu::LetterDha => 'ᤎ',
Limbu::LetterNa => 'ᤏ',
Limbu::LetterPa => 'ᤐ',
Limbu::LetterPha => 'ᤑ',
Limbu::LetterBa => 'ᤒ',
Limbu::LetterBha => 'ᤓ',
Limbu::LetterMa => 'ᤔ',
Limbu::LetterYa => 'ᤕ',
Limbu::LetterRa => 'ᤖ',
Limbu::LetterLa => 'ᤗ',
Limbu::LetterWa => 'ᤘ',
Limbu::LetterSha => 'ᤙ',
Limbu::LetterSsa => 'ᤚ',
Limbu::LetterSa => 'ᤛ',
Limbu::LetterHa => 'ᤜ',
Limbu::LetterGyan => 'ᤝ',
Limbu::LetterTra => 'ᤞ',
Limbu::VowelSignA => 'ᤠ',
Limbu::VowelSignI => 'ᤡ',
Limbu::VowelSignU => 'ᤢ',
Limbu::VowelSignEe => 'ᤣ',
Limbu::VowelSignAi => 'ᤤ',
Limbu::VowelSignOo => 'ᤥ',
Limbu::VowelSignAu => 'ᤦ',
Limbu::VowelSignE => 'ᤧ',
Limbu::VowelSignO => 'ᤨ',
Limbu::SubjoinedLetterYa => 'ᤩ',
Limbu::SubjoinedLetterRa => 'ᤪ',
Limbu::SubjoinedLetterWa => 'ᤫ',
Limbu::SmallLetterKa => 'ᤰ',
Limbu::SmallLetterNga => 'ᤱ',
Limbu::SmallLetterAnusvara => 'ᤲ',
Limbu::SmallLetterTa => 'ᤳ',
Limbu::SmallLetterNa => 'ᤴ',
Limbu::SmallLetterPa => 'ᤵ',
Limbu::SmallLetterMa => 'ᤶ',
Limbu::SmallLetterRa => 'ᤷ',
Limbu::SmallLetterLa => 'ᤸ',
Limbu::SignMukphreng => '᤹',
Limbu::SignKemphreng => '᤺',
Limbu::SignSaDashI => '᤻',
Limbu::SignLoo => '᥀',
Limbu::ExclamationMark => '᥄',
Limbu::QuestionMark => '᥅',
Limbu::DigitZero => '᥆',
Limbu::DigitOne => '᥇',
Limbu::DigitTwo => '᥈',
Limbu::DigitThree => '᥉',
Limbu::DigitFour => '᥊',
Limbu::DigitFive => '᥋',
Limbu::DigitSix => '᥌',
Limbu::DigitSeven => '᥍',
Limbu::DigitEight => '᥎',
}
}
}
impl std::convert::TryFrom<char> for Limbu {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'ᤀ' => Ok(Limbu::VowelDashCarrierLetter),
'ᤁ' => Ok(Limbu::LetterKa),
'ᤂ' => Ok(Limbu::LetterKha),
'ᤃ' => Ok(Limbu::LetterGa),
'ᤄ' => Ok(Limbu::LetterGha),
'ᤅ' => Ok(Limbu::LetterNga),
'ᤆ' => Ok(Limbu::LetterCa),
'ᤇ' => Ok(Limbu::LetterCha),
'ᤈ' => Ok(Limbu::LetterJa),
'ᤉ' => Ok(Limbu::LetterJha),
'ᤊ' => Ok(Limbu::LetterYan),
'ᤋ' => Ok(Limbu::LetterTa),
'ᤌ' => Ok(Limbu::LetterTha),
'ᤍ' => Ok(Limbu::LetterDa),
'ᤎ' => Ok(Limbu::LetterDha),
'ᤏ' => Ok(Limbu::LetterNa),
'ᤐ' => Ok(Limbu::LetterPa),
'ᤑ' => Ok(Limbu::LetterPha),
'ᤒ' => Ok(Limbu::LetterBa),
'ᤓ' => Ok(Limbu::LetterBha),
'ᤔ' => Ok(Limbu::LetterMa),
'ᤕ' => Ok(Limbu::LetterYa),
'ᤖ' => Ok(Limbu::LetterRa),
'ᤗ' => Ok(Limbu::LetterLa),
'ᤘ' => Ok(Limbu::LetterWa),
'ᤙ' => Ok(Limbu::LetterSha),
'ᤚ' => Ok(Limbu::LetterSsa),
'ᤛ' => Ok(Limbu::LetterSa),
'ᤜ' => Ok(Limbu::LetterHa),
'ᤝ' => Ok(Limbu::LetterGyan),
'ᤞ' => Ok(Limbu::LetterTra),
'ᤠ' => Ok(Limbu::VowelSignA),
'ᤡ' => Ok(Limbu::VowelSignI),
'ᤢ' => Ok(Limbu::VowelSignU),
'ᤣ' => Ok(Limbu::VowelSignEe),
'ᤤ' => Ok(Limbu::VowelSignAi),
'ᤥ' => Ok(Limbu::VowelSignOo),
'ᤦ' => Ok(Limbu::VowelSignAu),
'ᤧ' => Ok(Limbu::VowelSignE),
'ᤨ' => Ok(Limbu::VowelSignO),
'ᤩ' => Ok(Limbu::SubjoinedLetterYa),
'ᤪ' => Ok(Limbu::SubjoinedLetterRa),
'ᤫ' => Ok(Limbu::SubjoinedLetterWa),
'ᤰ' => Ok(Limbu::SmallLetterKa),
'ᤱ' => Ok(Limbu::SmallLetterNga),
'ᤲ' => Ok(Limbu::SmallLetterAnusvara),
'ᤳ' => Ok(Limbu::SmallLetterTa),
'ᤴ' => Ok(Limbu::SmallLetterNa),
'ᤵ' => Ok(Limbu::SmallLetterPa),
'ᤶ' => Ok(Limbu::SmallLetterMa),
'ᤷ' => Ok(Limbu::SmallLetterRa),
'ᤸ' => Ok(Limbu::SmallLetterLa),
'᤹' => Ok(Limbu::SignMukphreng),
'᤺' => Ok(Limbu::SignKemphreng),
'᤻' => Ok(Limbu::SignSaDashI),
'᥀' => Ok(Limbu::SignLoo),
'᥄' => Ok(Limbu::ExclamationMark),
'᥅' => Ok(Limbu::QuestionMark),
'᥆' => Ok(Limbu::DigitZero),
'᥇' => Ok(Limbu::DigitOne),
'᥈' => Ok(Limbu::DigitTwo),
'᥉' => Ok(Limbu::DigitThree),
'᥊' => Ok(Limbu::DigitFour),
'᥋' => Ok(Limbu::DigitFive),
'᥌' => Ok(Limbu::DigitSix),
'᥍' => Ok(Limbu::DigitSeven),
'᥎' => Ok(Limbu::DigitEight),
_ => Err(()),
}
}
}
impl Into<u32> for Limbu {
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 Limbu {
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 Limbu {
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 Limbu {
pub fn new() -> Self {
Limbu::VowelDashCarrierLetter
}
pub fn name(&self) -> String {
let s = std::format!("Limbu{:#?}", self);
string_morph::to_sentence_case(&s)
}
}