#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum RumiNumeralSymbols {
RumiDigitOne,
RumiDigitTwo,
RumiDigitThree,
RumiDigitFour,
RumiDigitFive,
RumiDigitSix,
RumiDigitSeven,
RumiDigitEight,
RumiDigitNine,
RumiNumberTen,
RumiNumberTwenty,
RumiNumberThirty,
RumiNumberForty,
RumiNumberFifty,
RumiNumberSixty,
RumiNumberSeventy,
RumiNumberEighty,
RumiNumberNinety,
RumiNumberOneHundred,
RumiNumberTwoHundred,
RumiNumberThreeHundred,
RumiNumberFourHundred,
RumiNumberFiveHundred,
RumiNumberSixHundred,
RumiNumberSevenHundred,
RumiNumberEightHundred,
RumiNumberNineHundred,
RumiFractionOneHalf,
RumiFractionOneQuarter,
RumiFractionOneThird,
RumiFractionTwoThirds,
}
impl Into<char> for RumiNumeralSymbols {
fn into(self) -> char {
match self {
RumiNumeralSymbols::RumiDigitOne => '𐹠',
RumiNumeralSymbols::RumiDigitTwo => '𐹡',
RumiNumeralSymbols::RumiDigitThree => '𐹢',
RumiNumeralSymbols::RumiDigitFour => '𐹣',
RumiNumeralSymbols::RumiDigitFive => '𐹤',
RumiNumeralSymbols::RumiDigitSix => '𐹥',
RumiNumeralSymbols::RumiDigitSeven => '𐹦',
RumiNumeralSymbols::RumiDigitEight => '𐹧',
RumiNumeralSymbols::RumiDigitNine => '𐹨',
RumiNumeralSymbols::RumiNumberTen => '𐹩',
RumiNumeralSymbols::RumiNumberTwenty => '𐹪',
RumiNumeralSymbols::RumiNumberThirty => '𐹫',
RumiNumeralSymbols::RumiNumberForty => '𐹬',
RumiNumeralSymbols::RumiNumberFifty => '𐹭',
RumiNumeralSymbols::RumiNumberSixty => '𐹮',
RumiNumeralSymbols::RumiNumberSeventy => '𐹯',
RumiNumeralSymbols::RumiNumberEighty => '𐹰',
RumiNumeralSymbols::RumiNumberNinety => '𐹱',
RumiNumeralSymbols::RumiNumberOneHundred => '𐹲',
RumiNumeralSymbols::RumiNumberTwoHundred => '𐹳',
RumiNumeralSymbols::RumiNumberThreeHundred => '𐹴',
RumiNumeralSymbols::RumiNumberFourHundred => '𐹵',
RumiNumeralSymbols::RumiNumberFiveHundred => '𐹶',
RumiNumeralSymbols::RumiNumberSixHundred => '𐹷',
RumiNumeralSymbols::RumiNumberSevenHundred => '𐹸',
RumiNumeralSymbols::RumiNumberEightHundred => '𐹹',
RumiNumeralSymbols::RumiNumberNineHundred => '𐹺',
RumiNumeralSymbols::RumiFractionOneHalf => '𐹻',
RumiNumeralSymbols::RumiFractionOneQuarter => '𐹼',
RumiNumeralSymbols::RumiFractionOneThird => '𐹽',
RumiNumeralSymbols::RumiFractionTwoThirds => '𐹾',
}
}
}
impl std::convert::TryFrom<char> for RumiNumeralSymbols {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𐹠' => Ok(RumiNumeralSymbols::RumiDigitOne),
'𐹡' => Ok(RumiNumeralSymbols::RumiDigitTwo),
'𐹢' => Ok(RumiNumeralSymbols::RumiDigitThree),
'𐹣' => Ok(RumiNumeralSymbols::RumiDigitFour),
'𐹤' => Ok(RumiNumeralSymbols::RumiDigitFive),
'𐹥' => Ok(RumiNumeralSymbols::RumiDigitSix),
'𐹦' => Ok(RumiNumeralSymbols::RumiDigitSeven),
'𐹧' => Ok(RumiNumeralSymbols::RumiDigitEight),
'𐹨' => Ok(RumiNumeralSymbols::RumiDigitNine),
'𐹩' => Ok(RumiNumeralSymbols::RumiNumberTen),
'𐹪' => Ok(RumiNumeralSymbols::RumiNumberTwenty),
'𐹫' => Ok(RumiNumeralSymbols::RumiNumberThirty),
'𐹬' => Ok(RumiNumeralSymbols::RumiNumberForty),
'𐹭' => Ok(RumiNumeralSymbols::RumiNumberFifty),
'𐹮' => Ok(RumiNumeralSymbols::RumiNumberSixty),
'𐹯' => Ok(RumiNumeralSymbols::RumiNumberSeventy),
'𐹰' => Ok(RumiNumeralSymbols::RumiNumberEighty),
'𐹱' => Ok(RumiNumeralSymbols::RumiNumberNinety),
'𐹲' => Ok(RumiNumeralSymbols::RumiNumberOneHundred),
'𐹳' => Ok(RumiNumeralSymbols::RumiNumberTwoHundred),
'𐹴' => Ok(RumiNumeralSymbols::RumiNumberThreeHundred),
'𐹵' => Ok(RumiNumeralSymbols::RumiNumberFourHundred),
'𐹶' => Ok(RumiNumeralSymbols::RumiNumberFiveHundred),
'𐹷' => Ok(RumiNumeralSymbols::RumiNumberSixHundred),
'𐹸' => Ok(RumiNumeralSymbols::RumiNumberSevenHundred),
'𐹹' => Ok(RumiNumeralSymbols::RumiNumberEightHundred),
'𐹺' => Ok(RumiNumeralSymbols::RumiNumberNineHundred),
'𐹻' => Ok(RumiNumeralSymbols::RumiFractionOneHalf),
'𐹼' => Ok(RumiNumeralSymbols::RumiFractionOneQuarter),
'𐹽' => Ok(RumiNumeralSymbols::RumiFractionOneThird),
'𐹾' => Ok(RumiNumeralSymbols::RumiFractionTwoThirds),
_ => Err(()),
}
}
}
impl Into<u32> for RumiNumeralSymbols {
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 RumiNumeralSymbols {
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 RumiNumeralSymbols {
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 RumiNumeralSymbols {
pub fn new() -> Self {
RumiNumeralSymbols::RumiDigitOne
}
pub fn name(&self) -> String {
let s = std::format!("RumiNumeralSymbols{:#?}", self);
string_morph::to_sentence_case(&s)
}
}