#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum OldSogdian {
LetterAleph,
LetterFinalAleph,
LetterBeth,
LetterFinalBeth,
LetterGimel,
LetterHe,
LetterFinalHe,
LetterWaw,
LetterZayin,
LetterHeth,
LetterYodh,
LetterKaph,
LetterLamedh,
LetterMem,
LetterNun,
LetterFinalNun,
LetterFinalNunWithVerticalTail,
LetterSamekh,
LetterAyin,
LetterAlternateAyin,
LetterPe,
LetterSadhe,
LetterFinalSadhe,
LetterFinalSadheWithVerticalTail,
LetterReshDashAyinDashDaleth,
LetterShin,
LetterTaw,
LetterFinalTaw,
LetterFinalTawWithVerticalTail,
NumberOne,
NumberTwo,
NumberThree,
NumberFour,
NumberFive,
NumberTen,
NumberTwenty,
NumberThirty,
NumberOneHundred,
FractionOneHalf,
LigatureAyinDashDaleth,
}
impl Into<char> for OldSogdian {
fn into(self) -> char {
match self {
OldSogdian::LetterAleph => '𐼀',
OldSogdian::LetterFinalAleph => '𐼁',
OldSogdian::LetterBeth => '𐼂',
OldSogdian::LetterFinalBeth => '𐼃',
OldSogdian::LetterGimel => '𐼄',
OldSogdian::LetterHe => '𐼅',
OldSogdian::LetterFinalHe => '𐼆',
OldSogdian::LetterWaw => '𐼇',
OldSogdian::LetterZayin => '𐼈',
OldSogdian::LetterHeth => '𐼉',
OldSogdian::LetterYodh => '𐼊',
OldSogdian::LetterKaph => '𐼋',
OldSogdian::LetterLamedh => '𐼌',
OldSogdian::LetterMem => '𐼍',
OldSogdian::LetterNun => '𐼎',
OldSogdian::LetterFinalNun => '𐼏',
OldSogdian::LetterFinalNunWithVerticalTail => '𐼐',
OldSogdian::LetterSamekh => '𐼑',
OldSogdian::LetterAyin => '𐼒',
OldSogdian::LetterAlternateAyin => '𐼓',
OldSogdian::LetterPe => '𐼔',
OldSogdian::LetterSadhe => '𐼕',
OldSogdian::LetterFinalSadhe => '𐼖',
OldSogdian::LetterFinalSadheWithVerticalTail => '𐼗',
OldSogdian::LetterReshDashAyinDashDaleth => '𐼘',
OldSogdian::LetterShin => '𐼙',
OldSogdian::LetterTaw => '𐼚',
OldSogdian::LetterFinalTaw => '𐼛',
OldSogdian::LetterFinalTawWithVerticalTail => '𐼜',
OldSogdian::NumberOne => '𐼝',
OldSogdian::NumberTwo => '𐼞',
OldSogdian::NumberThree => '𐼟',
OldSogdian::NumberFour => '𐼠',
OldSogdian::NumberFive => '𐼡',
OldSogdian::NumberTen => '𐼢',
OldSogdian::NumberTwenty => '𐼣',
OldSogdian::NumberThirty => '𐼤',
OldSogdian::NumberOneHundred => '𐼥',
OldSogdian::FractionOneHalf => '𐼦',
OldSogdian::LigatureAyinDashDaleth => '𐼧',
}
}
}
impl std::convert::TryFrom<char> for OldSogdian {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𐼀' => Ok(OldSogdian::LetterAleph),
'𐼁' => Ok(OldSogdian::LetterFinalAleph),
'𐼂' => Ok(OldSogdian::LetterBeth),
'𐼃' => Ok(OldSogdian::LetterFinalBeth),
'𐼄' => Ok(OldSogdian::LetterGimel),
'𐼅' => Ok(OldSogdian::LetterHe),
'𐼆' => Ok(OldSogdian::LetterFinalHe),
'𐼇' => Ok(OldSogdian::LetterWaw),
'𐼈' => Ok(OldSogdian::LetterZayin),
'𐼉' => Ok(OldSogdian::LetterHeth),
'𐼊' => Ok(OldSogdian::LetterYodh),
'𐼋' => Ok(OldSogdian::LetterKaph),
'𐼌' => Ok(OldSogdian::LetterLamedh),
'𐼍' => Ok(OldSogdian::LetterMem),
'𐼎' => Ok(OldSogdian::LetterNun),
'𐼏' => Ok(OldSogdian::LetterFinalNun),
'𐼐' => Ok(OldSogdian::LetterFinalNunWithVerticalTail),
'𐼑' => Ok(OldSogdian::LetterSamekh),
'𐼒' => Ok(OldSogdian::LetterAyin),
'𐼓' => Ok(OldSogdian::LetterAlternateAyin),
'𐼔' => Ok(OldSogdian::LetterPe),
'𐼕' => Ok(OldSogdian::LetterSadhe),
'𐼖' => Ok(OldSogdian::LetterFinalSadhe),
'𐼗' => Ok(OldSogdian::LetterFinalSadheWithVerticalTail),
'𐼘' => Ok(OldSogdian::LetterReshDashAyinDashDaleth),
'𐼙' => Ok(OldSogdian::LetterShin),
'𐼚' => Ok(OldSogdian::LetterTaw),
'𐼛' => Ok(OldSogdian::LetterFinalTaw),
'𐼜' => Ok(OldSogdian::LetterFinalTawWithVerticalTail),
'𐼝' => Ok(OldSogdian::NumberOne),
'𐼞' => Ok(OldSogdian::NumberTwo),
'𐼟' => Ok(OldSogdian::NumberThree),
'𐼠' => Ok(OldSogdian::NumberFour),
'𐼡' => Ok(OldSogdian::NumberFive),
'𐼢' => Ok(OldSogdian::NumberTen),
'𐼣' => Ok(OldSogdian::NumberTwenty),
'𐼤' => Ok(OldSogdian::NumberThirty),
'𐼥' => Ok(OldSogdian::NumberOneHundred),
'𐼦' => Ok(OldSogdian::FractionOneHalf),
'𐼧' => Ok(OldSogdian::LigatureAyinDashDaleth),
_ => Err(()),
}
}
}
impl Into<u32> for OldSogdian {
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 OldSogdian {
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 OldSogdian {
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 OldSogdian {
pub fn new() -> Self {
OldSogdian::LetterAleph
}
pub fn name(&self) -> String {
let s = std::format!("OldSogdian{:#?}", self);
string_morph::to_sentence_case(&s)
}
}