#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum OldPersian {
SignA,
SignI,
SignU,
SignKa,
SignKu,
SignGa,
SignGu,
SignXa,
SignCa,
SignJa,
SignJi,
SignTa,
SignTu,
SignDa,
SignDi,
SignDu,
SignTha,
SignPa,
SignBa,
SignFa,
SignNa,
SignNu,
SignMa,
SignMi,
SignMu,
SignYa,
SignVa,
SignVi,
SignRa,
SignRu,
SignLa,
SignSa,
SignZa,
SignSha,
SignSsa,
SignHa,
SignAuramazdaa,
SignAuramazdaaDash2,
SignAuramazdaaha,
SignXshaayathiya,
SignDahyaaush,
SignDahyaaushDash2,
SignBaga,
SignBuumish,
WordDivider,
NumberOne,
NumberTwo,
NumberTen,
NumberTwenty,
NumberHundred,
}
impl Into<char> for OldPersian {
fn into(self) -> char {
match self {
OldPersian::SignA => '𐎠',
OldPersian::SignI => '𐎡',
OldPersian::SignU => '𐎢',
OldPersian::SignKa => '𐎣',
OldPersian::SignKu => '𐎤',
OldPersian::SignGa => '𐎥',
OldPersian::SignGu => '𐎦',
OldPersian::SignXa => '𐎧',
OldPersian::SignCa => '𐎨',
OldPersian::SignJa => '𐎩',
OldPersian::SignJi => '𐎪',
OldPersian::SignTa => '𐎫',
OldPersian::SignTu => '𐎬',
OldPersian::SignDa => '𐎭',
OldPersian::SignDi => '𐎮',
OldPersian::SignDu => '𐎯',
OldPersian::SignTha => '𐎰',
OldPersian::SignPa => '𐎱',
OldPersian::SignBa => '𐎲',
OldPersian::SignFa => '𐎳',
OldPersian::SignNa => '𐎴',
OldPersian::SignNu => '𐎵',
OldPersian::SignMa => '𐎶',
OldPersian::SignMi => '𐎷',
OldPersian::SignMu => '𐎸',
OldPersian::SignYa => '𐎹',
OldPersian::SignVa => '𐎺',
OldPersian::SignVi => '𐎻',
OldPersian::SignRa => '𐎼',
OldPersian::SignRu => '𐎽',
OldPersian::SignLa => '𐎾',
OldPersian::SignSa => '𐎿',
OldPersian::SignZa => '𐏀',
OldPersian::SignSha => '𐏁',
OldPersian::SignSsa => '𐏂',
OldPersian::SignHa => '𐏃',
OldPersian::SignAuramazdaa => '𐏈',
OldPersian::SignAuramazdaaDash2 => '𐏉',
OldPersian::SignAuramazdaaha => '𐏊',
OldPersian::SignXshaayathiya => '𐏋',
OldPersian::SignDahyaaush => '𐏌',
OldPersian::SignDahyaaushDash2 => '𐏍',
OldPersian::SignBaga => '𐏎',
OldPersian::SignBuumish => '𐏏',
OldPersian::WordDivider => '𐏐',
OldPersian::NumberOne => '𐏑',
OldPersian::NumberTwo => '𐏒',
OldPersian::NumberTen => '𐏓',
OldPersian::NumberTwenty => '𐏔',
OldPersian::NumberHundred => '𐏕',
}
}
}
impl std::convert::TryFrom<char> for OldPersian {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𐎠' => Ok(OldPersian::SignA),
'𐎡' => Ok(OldPersian::SignI),
'𐎢' => Ok(OldPersian::SignU),
'𐎣' => Ok(OldPersian::SignKa),
'𐎤' => Ok(OldPersian::SignKu),
'𐎥' => Ok(OldPersian::SignGa),
'𐎦' => Ok(OldPersian::SignGu),
'𐎧' => Ok(OldPersian::SignXa),
'𐎨' => Ok(OldPersian::SignCa),
'𐎩' => Ok(OldPersian::SignJa),
'𐎪' => Ok(OldPersian::SignJi),
'𐎫' => Ok(OldPersian::SignTa),
'𐎬' => Ok(OldPersian::SignTu),
'𐎭' => Ok(OldPersian::SignDa),
'𐎮' => Ok(OldPersian::SignDi),
'𐎯' => Ok(OldPersian::SignDu),
'𐎰' => Ok(OldPersian::SignTha),
'𐎱' => Ok(OldPersian::SignPa),
'𐎲' => Ok(OldPersian::SignBa),
'𐎳' => Ok(OldPersian::SignFa),
'𐎴' => Ok(OldPersian::SignNa),
'𐎵' => Ok(OldPersian::SignNu),
'𐎶' => Ok(OldPersian::SignMa),
'𐎷' => Ok(OldPersian::SignMi),
'𐎸' => Ok(OldPersian::SignMu),
'𐎹' => Ok(OldPersian::SignYa),
'𐎺' => Ok(OldPersian::SignVa),
'𐎻' => Ok(OldPersian::SignVi),
'𐎼' => Ok(OldPersian::SignRa),
'𐎽' => Ok(OldPersian::SignRu),
'𐎾' => Ok(OldPersian::SignLa),
'𐎿' => Ok(OldPersian::SignSa),
'𐏀' => Ok(OldPersian::SignZa),
'𐏁' => Ok(OldPersian::SignSha),
'𐏂' => Ok(OldPersian::SignSsa),
'𐏃' => Ok(OldPersian::SignHa),
'𐏈' => Ok(OldPersian::SignAuramazdaa),
'𐏉' => Ok(OldPersian::SignAuramazdaaDash2),
'𐏊' => Ok(OldPersian::SignAuramazdaaha),
'𐏋' => Ok(OldPersian::SignXshaayathiya),
'𐏌' => Ok(OldPersian::SignDahyaaush),
'𐏍' => Ok(OldPersian::SignDahyaaushDash2),
'𐏎' => Ok(OldPersian::SignBaga),
'𐏏' => Ok(OldPersian::SignBuumish),
'𐏐' => Ok(OldPersian::WordDivider),
'𐏑' => Ok(OldPersian::NumberOne),
'𐏒' => Ok(OldPersian::NumberTwo),
'𐏓' => Ok(OldPersian::NumberTen),
'𐏔' => Ok(OldPersian::NumberTwenty),
'𐏕' => Ok(OldPersian::NumberHundred),
_ => Err(()),
}
}
}
impl Into<u32> for OldPersian {
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 OldPersian {
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 OldPersian {
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 OldPersian {
pub fn new() -> Self {
OldPersian::SignA
}
pub fn name(&self) -> String {
let s = std::format!("OldPersian{:#?}", self);
string_morph::to_sentence_case(&s)
}
}