mod constants {
pub const RUMI_DIGIT_ONE: char = '𐹠';
pub const RUMI_DIGIT_TWO: char = '𐹡';
pub const RUMI_DIGIT_THREE: char = '𐹢';
pub const RUMI_DIGIT_FOUR: char = '𐹣';
pub const RUMI_DIGIT_FIVE: char = '𐹤';
pub const RUMI_DIGIT_SIX: char = '𐹥';
pub const RUMI_DIGIT_SEVEN: char = '𐹦';
pub const RUMI_DIGIT_EIGHT: char = '𐹧';
pub const RUMI_DIGIT_NINE: char = '𐹨';
pub const RUMI_NUMBER_TEN: char = '𐹩';
pub const RUMI_NUMBER_TWENTY: char = '𐹪';
pub const RUMI_NUMBER_THIRTY: char = '𐹫';
pub const RUMI_NUMBER_FORTY: char = '𐹬';
pub const RUMI_NUMBER_FIFTY: char = '𐹭';
pub const RUMI_NUMBER_SIXTY: char = '𐹮';
pub const RUMI_NUMBER_SEVENTY: char = '𐹯';
pub const RUMI_NUMBER_EIGHTY: char = '𐹰';
pub const RUMI_NUMBER_NINETY: char = '𐹱';
pub const RUMI_NUMBER_ONE_HUNDRED: char = '𐹲';
pub const RUMI_NUMBER_TWO_HUNDRED: char = '𐹳';
pub const RUMI_NUMBER_THREE_HUNDRED: char = '𐹴';
pub const RUMI_NUMBER_FOUR_HUNDRED: char = '𐹵';
pub const RUMI_NUMBER_FIVE_HUNDRED: char = '𐹶';
pub const RUMI_NUMBER_SIX_HUNDRED: char = '𐹷';
pub const RUMI_NUMBER_SEVEN_HUNDRED: char = '𐹸';
pub const RUMI_NUMBER_EIGHT_HUNDRED: char = '𐹹';
pub const RUMI_NUMBER_NINE_HUNDRED: char = '𐹺';
pub const RUMI_FRACTION_ONE_HALF: char = '𐹻';
pub const RUMI_FRACTION_ONE_QUARTER: char = '𐹼';
pub const RUMI_FRACTION_ONE_THIRD: char = '𐹽';
pub const RUMI_FRACTION_TWO_THIRDS: char = '𐹾';
}
#[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 {
use constants::*;
match self {
RumiNumeralSymbols::RumiDigitOne => RUMI_DIGIT_ONE,
RumiNumeralSymbols::RumiDigitTwo => RUMI_DIGIT_TWO,
RumiNumeralSymbols::RumiDigitThree => RUMI_DIGIT_THREE,
RumiNumeralSymbols::RumiDigitFour => RUMI_DIGIT_FOUR,
RumiNumeralSymbols::RumiDigitFive => RUMI_DIGIT_FIVE,
RumiNumeralSymbols::RumiDigitSix => RUMI_DIGIT_SIX,
RumiNumeralSymbols::RumiDigitSeven => RUMI_DIGIT_SEVEN,
RumiNumeralSymbols::RumiDigitEight => RUMI_DIGIT_EIGHT,
RumiNumeralSymbols::RumiDigitNine => RUMI_DIGIT_NINE,
RumiNumeralSymbols::RumiNumberTen => RUMI_NUMBER_TEN,
RumiNumeralSymbols::RumiNumberTwenty => RUMI_NUMBER_TWENTY,
RumiNumeralSymbols::RumiNumberThirty => RUMI_NUMBER_THIRTY,
RumiNumeralSymbols::RumiNumberForty => RUMI_NUMBER_FORTY,
RumiNumeralSymbols::RumiNumberFifty => RUMI_NUMBER_FIFTY,
RumiNumeralSymbols::RumiNumberSixty => RUMI_NUMBER_SIXTY,
RumiNumeralSymbols::RumiNumberSeventy => RUMI_NUMBER_SEVENTY,
RumiNumeralSymbols::RumiNumberEighty => RUMI_NUMBER_EIGHTY,
RumiNumeralSymbols::RumiNumberNinety => RUMI_NUMBER_NINETY,
RumiNumeralSymbols::RumiNumberOneHundred => RUMI_NUMBER_ONE_HUNDRED,
RumiNumeralSymbols::RumiNumberTwoHundred => RUMI_NUMBER_TWO_HUNDRED,
RumiNumeralSymbols::RumiNumberThreeHundred => RUMI_NUMBER_THREE_HUNDRED,
RumiNumeralSymbols::RumiNumberFourHundred => RUMI_NUMBER_FOUR_HUNDRED,
RumiNumeralSymbols::RumiNumberFiveHundred => RUMI_NUMBER_FIVE_HUNDRED,
RumiNumeralSymbols::RumiNumberSixHundred => RUMI_NUMBER_SIX_HUNDRED,
RumiNumeralSymbols::RumiNumberSevenHundred => RUMI_NUMBER_SEVEN_HUNDRED,
RumiNumeralSymbols::RumiNumberEightHundred => RUMI_NUMBER_EIGHT_HUNDRED,
RumiNumeralSymbols::RumiNumberNineHundred => RUMI_NUMBER_NINE_HUNDRED,
RumiNumeralSymbols::RumiFractionOneHalf => RUMI_FRACTION_ONE_HALF,
RumiNumeralSymbols::RumiFractionOneQuarter => RUMI_FRACTION_ONE_QUARTER,
RumiNumeralSymbols::RumiFractionOneThird => RUMI_FRACTION_ONE_THIRD,
RumiNumeralSymbols::RumiFractionTwoThirds => RUMI_FRACTION_TWO_THIRDS,
}
}
}
impl std::convert::TryFrom<char> for RumiNumeralSymbols {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
RUMI_DIGIT_ONE => Ok(RumiNumeralSymbols::RumiDigitOne),
RUMI_DIGIT_TWO => Ok(RumiNumeralSymbols::RumiDigitTwo),
RUMI_DIGIT_THREE => Ok(RumiNumeralSymbols::RumiDigitThree),
RUMI_DIGIT_FOUR => Ok(RumiNumeralSymbols::RumiDigitFour),
RUMI_DIGIT_FIVE => Ok(RumiNumeralSymbols::RumiDigitFive),
RUMI_DIGIT_SIX => Ok(RumiNumeralSymbols::RumiDigitSix),
RUMI_DIGIT_SEVEN => Ok(RumiNumeralSymbols::RumiDigitSeven),
RUMI_DIGIT_EIGHT => Ok(RumiNumeralSymbols::RumiDigitEight),
RUMI_DIGIT_NINE => Ok(RumiNumeralSymbols::RumiDigitNine),
RUMI_NUMBER_TEN => Ok(RumiNumeralSymbols::RumiNumberTen),
RUMI_NUMBER_TWENTY => Ok(RumiNumeralSymbols::RumiNumberTwenty),
RUMI_NUMBER_THIRTY => Ok(RumiNumeralSymbols::RumiNumberThirty),
RUMI_NUMBER_FORTY => Ok(RumiNumeralSymbols::RumiNumberForty),
RUMI_NUMBER_FIFTY => Ok(RumiNumeralSymbols::RumiNumberFifty),
RUMI_NUMBER_SIXTY => Ok(RumiNumeralSymbols::RumiNumberSixty),
RUMI_NUMBER_SEVENTY => Ok(RumiNumeralSymbols::RumiNumberSeventy),
RUMI_NUMBER_EIGHTY => Ok(RumiNumeralSymbols::RumiNumberEighty),
RUMI_NUMBER_NINETY => Ok(RumiNumeralSymbols::RumiNumberNinety),
RUMI_NUMBER_ONE_HUNDRED => Ok(RumiNumeralSymbols::RumiNumberOneHundred),
RUMI_NUMBER_TWO_HUNDRED => Ok(RumiNumeralSymbols::RumiNumberTwoHundred),
RUMI_NUMBER_THREE_HUNDRED => Ok(RumiNumeralSymbols::RumiNumberThreeHundred),
RUMI_NUMBER_FOUR_HUNDRED => Ok(RumiNumeralSymbols::RumiNumberFourHundred),
RUMI_NUMBER_FIVE_HUNDRED => Ok(RumiNumeralSymbols::RumiNumberFiveHundred),
RUMI_NUMBER_SIX_HUNDRED => Ok(RumiNumeralSymbols::RumiNumberSixHundred),
RUMI_NUMBER_SEVEN_HUNDRED => Ok(RumiNumeralSymbols::RumiNumberSevenHundred),
RUMI_NUMBER_EIGHT_HUNDRED => Ok(RumiNumeralSymbols::RumiNumberEightHundred),
RUMI_NUMBER_NINE_HUNDRED => Ok(RumiNumeralSymbols::RumiNumberNineHundred),
RUMI_FRACTION_ONE_HALF => Ok(RumiNumeralSymbols::RumiFractionOneHalf),
RUMI_FRACTION_ONE_QUARTER => Ok(RumiNumeralSymbols::RumiFractionOneQuarter),
RUMI_FRACTION_ONE_THIRD => Ok(RumiNumeralSymbols::RumiFractionOneThird),
RUMI_FRACTION_TWO_THIRDS => 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) -> &str {
match self {
RumiNumeralSymbols::RumiDigitOne => "rumi digit one",
RumiNumeralSymbols::RumiDigitTwo => "rumi digit two",
RumiNumeralSymbols::RumiDigitThree => "rumi digit three",
RumiNumeralSymbols::RumiDigitFour => "rumi digit four",
RumiNumeralSymbols::RumiDigitFive => "rumi digit five",
RumiNumeralSymbols::RumiDigitSix => "rumi digit six",
RumiNumeralSymbols::RumiDigitSeven => "rumi digit seven",
RumiNumeralSymbols::RumiDigitEight => "rumi digit eight",
RumiNumeralSymbols::RumiDigitNine => "rumi digit nine",
RumiNumeralSymbols::RumiNumberTen => "rumi number ten",
RumiNumeralSymbols::RumiNumberTwenty => "rumi number twenty",
RumiNumeralSymbols::RumiNumberThirty => "rumi number thirty",
RumiNumeralSymbols::RumiNumberForty => "rumi number forty",
RumiNumeralSymbols::RumiNumberFifty => "rumi number fifty",
RumiNumeralSymbols::RumiNumberSixty => "rumi number sixty",
RumiNumeralSymbols::RumiNumberSeventy => "rumi number seventy",
RumiNumeralSymbols::RumiNumberEighty => "rumi number eighty",
RumiNumeralSymbols::RumiNumberNinety => "rumi number ninety",
RumiNumeralSymbols::RumiNumberOneHundred => "rumi number one hundred",
RumiNumeralSymbols::RumiNumberTwoHundred => "rumi number two hundred",
RumiNumeralSymbols::RumiNumberThreeHundred => "rumi number three hundred",
RumiNumeralSymbols::RumiNumberFourHundred => "rumi number four hundred",
RumiNumeralSymbols::RumiNumberFiveHundred => "rumi number five hundred",
RumiNumeralSymbols::RumiNumberSixHundred => "rumi number six hundred",
RumiNumeralSymbols::RumiNumberSevenHundred => "rumi number seven hundred",
RumiNumeralSymbols::RumiNumberEightHundred => "rumi number eight hundred",
RumiNumeralSymbols::RumiNumberNineHundred => "rumi number nine hundred",
RumiNumeralSymbols::RumiFractionOneHalf => "rumi fraction one half",
RumiNumeralSymbols::RumiFractionOneQuarter => "rumi fraction one quarter",
RumiNumeralSymbols::RumiFractionOneThird => "rumi fraction one third",
RumiNumeralSymbols::RumiFractionTwoThirds => "rumi fraction two thirds",
}
}
}