mod constants {
pub const LETTER_ALEF: char = '𐒀';
pub const LETTER_BA: char = '𐒁';
pub const LETTER_TA: char = '𐒂';
pub const LETTER_JA: char = '𐒃';
pub const LETTER_XA: char = '𐒄';
pub const LETTER_KHA: char = '𐒅';
pub const LETTER_DEEL: char = '𐒆';
pub const LETTER_RA: char = '𐒇';
pub const LETTER_SA: char = '𐒈';
pub const LETTER_SHIIN: char = '𐒉';
pub const LETTER_DHA: char = '𐒊';
pub const LETTER_CAYN: char = '𐒋';
pub const LETTER_GA: char = '𐒌';
pub const LETTER_FA: char = '𐒍';
pub const LETTER_QAAF: char = '𐒎';
pub const LETTER_KAAF: char = '𐒏';
pub const LETTER_LAAN: char = '𐒐';
pub const LETTER_MIIN: char = '𐒑';
pub const LETTER_NUUN: char = '𐒒';
pub const LETTER_WAW: char = '𐒓';
pub const LETTER_HA: char = '𐒔';
pub const LETTER_YA: char = '𐒕';
pub const LETTER_A: char = '𐒖';
pub const LETTER_E: char = '𐒗';
pub const LETTER_I: char = '𐒘';
pub const LETTER_O: char = '𐒙';
pub const LETTER_U: char = '𐒚';
pub const LETTER_AA: char = '𐒛';
pub const LETTER_EE: char = '𐒜';
pub const LETTER_OO: char = '𐒝';
pub const DIGIT_ZERO: char = '𐒠';
pub const DIGIT_ONE: char = '𐒡';
pub const DIGIT_TWO: char = '𐒢';
pub const DIGIT_THREE: char = '𐒣';
pub const DIGIT_FOUR: char = '𐒤';
pub const DIGIT_FIVE: char = '𐒥';
pub const DIGIT_SIX: char = '𐒦';
pub const DIGIT_SEVEN: char = '𐒧';
pub const DIGIT_EIGHT: char = '𐒨';
pub const DIGIT_NINE: char = '𐒩';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Osmanya {
LetterAlef,
LetterBa,
LetterTa,
LetterJa,
LetterXa,
LetterKha,
LetterDeel,
LetterRa,
LetterSa,
LetterShiin,
LetterDha,
LetterCayn,
LetterGa,
LetterFa,
LetterQaaf,
LetterKaaf,
LetterLaan,
LetterMiin,
LetterNuun,
LetterWaw,
LetterHa,
LetterYa,
LetterA,
LetterE,
LetterI,
LetterO,
LetterU,
LetterAa,
LetterEe,
LetterOo,
DigitZero,
DigitOne,
DigitTwo,
DigitThree,
DigitFour,
DigitFive,
DigitSix,
DigitSeven,
DigitEight,
DigitNine,
}
impl Into<char> for Osmanya {
fn into(self) -> char {
use constants::*;
match self {
Osmanya::LetterAlef => LETTER_ALEF,
Osmanya::LetterBa => LETTER_BA,
Osmanya::LetterTa => LETTER_TA,
Osmanya::LetterJa => LETTER_JA,
Osmanya::LetterXa => LETTER_XA,
Osmanya::LetterKha => LETTER_KHA,
Osmanya::LetterDeel => LETTER_DEEL,
Osmanya::LetterRa => LETTER_RA,
Osmanya::LetterSa => LETTER_SA,
Osmanya::LetterShiin => LETTER_SHIIN,
Osmanya::LetterDha => LETTER_DHA,
Osmanya::LetterCayn => LETTER_CAYN,
Osmanya::LetterGa => LETTER_GA,
Osmanya::LetterFa => LETTER_FA,
Osmanya::LetterQaaf => LETTER_QAAF,
Osmanya::LetterKaaf => LETTER_KAAF,
Osmanya::LetterLaan => LETTER_LAAN,
Osmanya::LetterMiin => LETTER_MIIN,
Osmanya::LetterNuun => LETTER_NUUN,
Osmanya::LetterWaw => LETTER_WAW,
Osmanya::LetterHa => LETTER_HA,
Osmanya::LetterYa => LETTER_YA,
Osmanya::LetterA => LETTER_A,
Osmanya::LetterE => LETTER_E,
Osmanya::LetterI => LETTER_I,
Osmanya::LetterO => LETTER_O,
Osmanya::LetterU => LETTER_U,
Osmanya::LetterAa => LETTER_AA,
Osmanya::LetterEe => LETTER_EE,
Osmanya::LetterOo => LETTER_OO,
Osmanya::DigitZero => DIGIT_ZERO,
Osmanya::DigitOne => DIGIT_ONE,
Osmanya::DigitTwo => DIGIT_TWO,
Osmanya::DigitThree => DIGIT_THREE,
Osmanya::DigitFour => DIGIT_FOUR,
Osmanya::DigitFive => DIGIT_FIVE,
Osmanya::DigitSix => DIGIT_SIX,
Osmanya::DigitSeven => DIGIT_SEVEN,
Osmanya::DigitEight => DIGIT_EIGHT,
Osmanya::DigitNine => DIGIT_NINE,
}
}
}
impl std::convert::TryFrom<char> for Osmanya {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_ALEF => Ok(Osmanya::LetterAlef),
LETTER_BA => Ok(Osmanya::LetterBa),
LETTER_TA => Ok(Osmanya::LetterTa),
LETTER_JA => Ok(Osmanya::LetterJa),
LETTER_XA => Ok(Osmanya::LetterXa),
LETTER_KHA => Ok(Osmanya::LetterKha),
LETTER_DEEL => Ok(Osmanya::LetterDeel),
LETTER_RA => Ok(Osmanya::LetterRa),
LETTER_SA => Ok(Osmanya::LetterSa),
LETTER_SHIIN => Ok(Osmanya::LetterShiin),
LETTER_DHA => Ok(Osmanya::LetterDha),
LETTER_CAYN => Ok(Osmanya::LetterCayn),
LETTER_GA => Ok(Osmanya::LetterGa),
LETTER_FA => Ok(Osmanya::LetterFa),
LETTER_QAAF => Ok(Osmanya::LetterQaaf),
LETTER_KAAF => Ok(Osmanya::LetterKaaf),
LETTER_LAAN => Ok(Osmanya::LetterLaan),
LETTER_MIIN => Ok(Osmanya::LetterMiin),
LETTER_NUUN => Ok(Osmanya::LetterNuun),
LETTER_WAW => Ok(Osmanya::LetterWaw),
LETTER_HA => Ok(Osmanya::LetterHa),
LETTER_YA => Ok(Osmanya::LetterYa),
LETTER_A => Ok(Osmanya::LetterA),
LETTER_E => Ok(Osmanya::LetterE),
LETTER_I => Ok(Osmanya::LetterI),
LETTER_O => Ok(Osmanya::LetterO),
LETTER_U => Ok(Osmanya::LetterU),
LETTER_AA => Ok(Osmanya::LetterAa),
LETTER_EE => Ok(Osmanya::LetterEe),
LETTER_OO => Ok(Osmanya::LetterOo),
DIGIT_ZERO => Ok(Osmanya::DigitZero),
DIGIT_ONE => Ok(Osmanya::DigitOne),
DIGIT_TWO => Ok(Osmanya::DigitTwo),
DIGIT_THREE => Ok(Osmanya::DigitThree),
DIGIT_FOUR => Ok(Osmanya::DigitFour),
DIGIT_FIVE => Ok(Osmanya::DigitFive),
DIGIT_SIX => Ok(Osmanya::DigitSix),
DIGIT_SEVEN => Ok(Osmanya::DigitSeven),
DIGIT_EIGHT => Ok(Osmanya::DigitEight),
DIGIT_NINE => Ok(Osmanya::DigitNine),
_ => Err(()),
}
}
}
impl Into<u32> for Osmanya {
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 Osmanya {
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 Osmanya {
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 Osmanya {
pub fn new() -> Self {
Osmanya::LetterAlef
}
pub fn name(&self) -> &str {
match self {
Osmanya::LetterAlef => "osmanya letter alef",
Osmanya::LetterBa => "osmanya letter ba",
Osmanya::LetterTa => "osmanya letter ta",
Osmanya::LetterJa => "osmanya letter ja",
Osmanya::LetterXa => "osmanya letter xa",
Osmanya::LetterKha => "osmanya letter kha",
Osmanya::LetterDeel => "osmanya letter deel",
Osmanya::LetterRa => "osmanya letter ra",
Osmanya::LetterSa => "osmanya letter sa",
Osmanya::LetterShiin => "osmanya letter shiin",
Osmanya::LetterDha => "osmanya letter dha",
Osmanya::LetterCayn => "osmanya letter cayn",
Osmanya::LetterGa => "osmanya letter ga",
Osmanya::LetterFa => "osmanya letter fa",
Osmanya::LetterQaaf => "osmanya letter qaaf",
Osmanya::LetterKaaf => "osmanya letter kaaf",
Osmanya::LetterLaan => "osmanya letter laan",
Osmanya::LetterMiin => "osmanya letter miin",
Osmanya::LetterNuun => "osmanya letter nuun",
Osmanya::LetterWaw => "osmanya letter waw",
Osmanya::LetterHa => "osmanya letter ha",
Osmanya::LetterYa => "osmanya letter ya",
Osmanya::LetterA => "osmanya letter a",
Osmanya::LetterE => "osmanya letter e",
Osmanya::LetterI => "osmanya letter i",
Osmanya::LetterO => "osmanya letter o",
Osmanya::LetterU => "osmanya letter u",
Osmanya::LetterAa => "osmanya letter aa",
Osmanya::LetterEe => "osmanya letter ee",
Osmanya::LetterOo => "osmanya letter oo",
Osmanya::DigitZero => "osmanya digit zero",
Osmanya::DigitOne => "osmanya digit one",
Osmanya::DigitTwo => "osmanya digit two",
Osmanya::DigitThree => "osmanya digit three",
Osmanya::DigitFour => "osmanya digit four",
Osmanya::DigitFive => "osmanya digit five",
Osmanya::DigitSix => "osmanya digit six",
Osmanya::DigitSeven => "osmanya digit seven",
Osmanya::DigitEight => "osmanya digit eight",
Osmanya::DigitNine => "osmanya digit nine",
}
}
}