#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum OldTurkic {
LetterOrkhonA,
LetterYeniseiA,
LetterYeniseiAe,
LetterOrkhonI,
LetterYeniseiI,
LetterYeniseiE,
LetterOrkhonO,
LetterOrkhonOe,
LetterYeniseiOe,
LetterOrkhonAb,
LetterYeniseiAb,
LetterOrkhonAeb,
LetterYeniseiAeb,
LetterOrkhonAg,
LetterYeniseiAg,
LetterOrkhonAeg,
LetterYeniseiAeg,
LetterOrkhonAd,
LetterYeniseiAd,
LetterOrkhonAed,
LetterOrkhonEz,
LetterYeniseiEz,
LetterOrkhonAy,
LetterYeniseiAy,
LetterOrkhonAey,
LetterYeniseiAey,
LetterOrkhonAek,
LetterYeniseiAek,
LetterOrkhonOek,
LetterYeniseiOek,
LetterOrkhonAl,
LetterYeniseiAl,
LetterOrkhonAel,
LetterOrkhonElt,
LetterOrkhonEm,
LetterOrkhonAn,
LetterOrkhonAen,
LetterYeniseiAen,
LetterOrkhonEnt,
LetterYeniseiEnt,
LetterOrkhonEnc,
LetterYeniseiEnc,
LetterOrkhonEny,
LetterYeniseiEny,
LetterYeniseiAng,
LetterOrkhonEng,
LetterYeniseiAeng,
LetterOrkhonEp,
LetterOrkhonOp,
LetterOrkhonIc,
LetterOrkhonEc,
LetterYeniseiEc,
LetterOrkhonAq,
LetterYeniseiAq,
LetterOrkhonIq,
LetterYeniseiIq,
LetterOrkhonOq,
LetterYeniseiOq,
LetterOrkhonAr,
LetterYeniseiAr,
LetterOrkhonAer,
LetterOrkhonAs,
LetterOrkhonAes,
LetterOrkhonAsh,
LetterYeniseiAsh,
LetterOrkhonEsh,
LetterYeniseiEsh,
LetterOrkhonAt,
LetterYeniseiAt,
LetterOrkhonAet,
LetterYeniseiAet,
LetterOrkhonOt,
LetterOrkhonBash,
}
impl Into<char> for OldTurkic {
fn into(self) -> char {
match self {
OldTurkic::LetterOrkhonA => '𐰀',
OldTurkic::LetterYeniseiA => '𐰁',
OldTurkic::LetterYeniseiAe => '𐰂',
OldTurkic::LetterOrkhonI => '𐰃',
OldTurkic::LetterYeniseiI => '𐰄',
OldTurkic::LetterYeniseiE => '𐰅',
OldTurkic::LetterOrkhonO => '𐰆',
OldTurkic::LetterOrkhonOe => '𐰇',
OldTurkic::LetterYeniseiOe => '𐰈',
OldTurkic::LetterOrkhonAb => '𐰉',
OldTurkic::LetterYeniseiAb => '𐰊',
OldTurkic::LetterOrkhonAeb => '𐰋',
OldTurkic::LetterYeniseiAeb => '𐰌',
OldTurkic::LetterOrkhonAg => '𐰍',
OldTurkic::LetterYeniseiAg => '𐰎',
OldTurkic::LetterOrkhonAeg => '𐰏',
OldTurkic::LetterYeniseiAeg => '𐰐',
OldTurkic::LetterOrkhonAd => '𐰑',
OldTurkic::LetterYeniseiAd => '𐰒',
OldTurkic::LetterOrkhonAed => '𐰓',
OldTurkic::LetterOrkhonEz => '𐰔',
OldTurkic::LetterYeniseiEz => '𐰕',
OldTurkic::LetterOrkhonAy => '𐰖',
OldTurkic::LetterYeniseiAy => '𐰗',
OldTurkic::LetterOrkhonAey => '𐰘',
OldTurkic::LetterYeniseiAey => '𐰙',
OldTurkic::LetterOrkhonAek => '𐰚',
OldTurkic::LetterYeniseiAek => '𐰛',
OldTurkic::LetterOrkhonOek => '𐰜',
OldTurkic::LetterYeniseiOek => '𐰝',
OldTurkic::LetterOrkhonAl => '𐰞',
OldTurkic::LetterYeniseiAl => '𐰟',
OldTurkic::LetterOrkhonAel => '𐰠',
OldTurkic::LetterOrkhonElt => '𐰡',
OldTurkic::LetterOrkhonEm => '𐰢',
OldTurkic::LetterOrkhonAn => '𐰣',
OldTurkic::LetterOrkhonAen => '𐰤',
OldTurkic::LetterYeniseiAen => '𐰥',
OldTurkic::LetterOrkhonEnt => '𐰦',
OldTurkic::LetterYeniseiEnt => '𐰧',
OldTurkic::LetterOrkhonEnc => '𐰨',
OldTurkic::LetterYeniseiEnc => '𐰩',
OldTurkic::LetterOrkhonEny => '𐰪',
OldTurkic::LetterYeniseiEny => '𐰫',
OldTurkic::LetterYeniseiAng => '𐰬',
OldTurkic::LetterOrkhonEng => '𐰭',
OldTurkic::LetterYeniseiAeng => '𐰮',
OldTurkic::LetterOrkhonEp => '𐰯',
OldTurkic::LetterOrkhonOp => '𐰰',
OldTurkic::LetterOrkhonIc => '𐰱',
OldTurkic::LetterOrkhonEc => '𐰲',
OldTurkic::LetterYeniseiEc => '𐰳',
OldTurkic::LetterOrkhonAq => '𐰴',
OldTurkic::LetterYeniseiAq => '𐰵',
OldTurkic::LetterOrkhonIq => '𐰶',
OldTurkic::LetterYeniseiIq => '𐰷',
OldTurkic::LetterOrkhonOq => '𐰸',
OldTurkic::LetterYeniseiOq => '𐰹',
OldTurkic::LetterOrkhonAr => '𐰺',
OldTurkic::LetterYeniseiAr => '𐰻',
OldTurkic::LetterOrkhonAer => '𐰼',
OldTurkic::LetterOrkhonAs => '𐰽',
OldTurkic::LetterOrkhonAes => '𐰾',
OldTurkic::LetterOrkhonAsh => '𐰿',
OldTurkic::LetterYeniseiAsh => '𐱀',
OldTurkic::LetterOrkhonEsh => '𐱁',
OldTurkic::LetterYeniseiEsh => '𐱂',
OldTurkic::LetterOrkhonAt => '𐱃',
OldTurkic::LetterYeniseiAt => '𐱄',
OldTurkic::LetterOrkhonAet => '𐱅',
OldTurkic::LetterYeniseiAet => '𐱆',
OldTurkic::LetterOrkhonOt => '𐱇',
OldTurkic::LetterOrkhonBash => '𐱈',
}
}
}
impl std::convert::TryFrom<char> for OldTurkic {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𐰀' => Ok(OldTurkic::LetterOrkhonA),
'𐰁' => Ok(OldTurkic::LetterYeniseiA),
'𐰂' => Ok(OldTurkic::LetterYeniseiAe),
'𐰃' => Ok(OldTurkic::LetterOrkhonI),
'𐰄' => Ok(OldTurkic::LetterYeniseiI),
'𐰅' => Ok(OldTurkic::LetterYeniseiE),
'𐰆' => Ok(OldTurkic::LetterOrkhonO),
'𐰇' => Ok(OldTurkic::LetterOrkhonOe),
'𐰈' => Ok(OldTurkic::LetterYeniseiOe),
'𐰉' => Ok(OldTurkic::LetterOrkhonAb),
'𐰊' => Ok(OldTurkic::LetterYeniseiAb),
'𐰋' => Ok(OldTurkic::LetterOrkhonAeb),
'𐰌' => Ok(OldTurkic::LetterYeniseiAeb),
'𐰍' => Ok(OldTurkic::LetterOrkhonAg),
'𐰎' => Ok(OldTurkic::LetterYeniseiAg),
'𐰏' => Ok(OldTurkic::LetterOrkhonAeg),
'𐰐' => Ok(OldTurkic::LetterYeniseiAeg),
'𐰑' => Ok(OldTurkic::LetterOrkhonAd),
'𐰒' => Ok(OldTurkic::LetterYeniseiAd),
'𐰓' => Ok(OldTurkic::LetterOrkhonAed),
'𐰔' => Ok(OldTurkic::LetterOrkhonEz),
'𐰕' => Ok(OldTurkic::LetterYeniseiEz),
'𐰖' => Ok(OldTurkic::LetterOrkhonAy),
'𐰗' => Ok(OldTurkic::LetterYeniseiAy),
'𐰘' => Ok(OldTurkic::LetterOrkhonAey),
'𐰙' => Ok(OldTurkic::LetterYeniseiAey),
'𐰚' => Ok(OldTurkic::LetterOrkhonAek),
'𐰛' => Ok(OldTurkic::LetterYeniseiAek),
'𐰜' => Ok(OldTurkic::LetterOrkhonOek),
'𐰝' => Ok(OldTurkic::LetterYeniseiOek),
'𐰞' => Ok(OldTurkic::LetterOrkhonAl),
'𐰟' => Ok(OldTurkic::LetterYeniseiAl),
'𐰠' => Ok(OldTurkic::LetterOrkhonAel),
'𐰡' => Ok(OldTurkic::LetterOrkhonElt),
'𐰢' => Ok(OldTurkic::LetterOrkhonEm),
'𐰣' => Ok(OldTurkic::LetterOrkhonAn),
'𐰤' => Ok(OldTurkic::LetterOrkhonAen),
'𐰥' => Ok(OldTurkic::LetterYeniseiAen),
'𐰦' => Ok(OldTurkic::LetterOrkhonEnt),
'𐰧' => Ok(OldTurkic::LetterYeniseiEnt),
'𐰨' => Ok(OldTurkic::LetterOrkhonEnc),
'𐰩' => Ok(OldTurkic::LetterYeniseiEnc),
'𐰪' => Ok(OldTurkic::LetterOrkhonEny),
'𐰫' => Ok(OldTurkic::LetterYeniseiEny),
'𐰬' => Ok(OldTurkic::LetterYeniseiAng),
'𐰭' => Ok(OldTurkic::LetterOrkhonEng),
'𐰮' => Ok(OldTurkic::LetterYeniseiAeng),
'𐰯' => Ok(OldTurkic::LetterOrkhonEp),
'𐰰' => Ok(OldTurkic::LetterOrkhonOp),
'𐰱' => Ok(OldTurkic::LetterOrkhonIc),
'𐰲' => Ok(OldTurkic::LetterOrkhonEc),
'𐰳' => Ok(OldTurkic::LetterYeniseiEc),
'𐰴' => Ok(OldTurkic::LetterOrkhonAq),
'𐰵' => Ok(OldTurkic::LetterYeniseiAq),
'𐰶' => Ok(OldTurkic::LetterOrkhonIq),
'𐰷' => Ok(OldTurkic::LetterYeniseiIq),
'𐰸' => Ok(OldTurkic::LetterOrkhonOq),
'𐰹' => Ok(OldTurkic::LetterYeniseiOq),
'𐰺' => Ok(OldTurkic::LetterOrkhonAr),
'𐰻' => Ok(OldTurkic::LetterYeniseiAr),
'𐰼' => Ok(OldTurkic::LetterOrkhonAer),
'𐰽' => Ok(OldTurkic::LetterOrkhonAs),
'𐰾' => Ok(OldTurkic::LetterOrkhonAes),
'𐰿' => Ok(OldTurkic::LetterOrkhonAsh),
'𐱀' => Ok(OldTurkic::LetterYeniseiAsh),
'𐱁' => Ok(OldTurkic::LetterOrkhonEsh),
'𐱂' => Ok(OldTurkic::LetterYeniseiEsh),
'𐱃' => Ok(OldTurkic::LetterOrkhonAt),
'𐱄' => Ok(OldTurkic::LetterYeniseiAt),
'𐱅' => Ok(OldTurkic::LetterOrkhonAet),
'𐱆' => Ok(OldTurkic::LetterYeniseiAet),
'𐱇' => Ok(OldTurkic::LetterOrkhonOt),
'𐱈' => Ok(OldTurkic::LetterOrkhonBash),
_ => Err(()),
}
}
}
impl Into<u32> for OldTurkic {
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 OldTurkic {
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 OldTurkic {
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 OldTurkic {
pub fn new() -> Self {
OldTurkic::LetterOrkhonA
}
pub fn name(&self) -> String {
let s = std::format!("OldTurkic{:#?}", self);
string_morph::to_sentence_case(&s)
}
}