#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Carian {
LetterA,
LetterP2,
LetterD,
LetterL,
LetterUuu,
LetterR,
LetterLd,
LetterA2,
LetterQ,
LetterB,
LetterM,
LetterO,
LetterD2,
LetterT,
LetterSh,
LetterSh2,
LetterS,
LetterCDash18,
LetterU,
LetterNn,
LetterX,
LetterN,
LetterTt2,
LetterP,
LetterSs,
LetterI,
LetterE,
LetterUuuu,
LetterK,
LetterK2,
LetterNd,
LetterUu,
LetterG,
LetterG2,
LetterSt,
LetterSt2,
LetterNg,
LetterIi,
LetterCDash39,
LetterTt,
LetterUuu2,
LetterRr,
LetterMb,
LetterMb2,
LetterMb3,
LetterMb4,
LetterLd2,
LetterE2,
LetterUuu3,
}
impl Into<char> for Carian {
fn into(self) -> char {
match self {
Carian::LetterA => '𐊠',
Carian::LetterP2 => '𐊡',
Carian::LetterD => '𐊢',
Carian::LetterL => '𐊣',
Carian::LetterUuu => '𐊤',
Carian::LetterR => '𐊥',
Carian::LetterLd => '𐊦',
Carian::LetterA2 => '𐊧',
Carian::LetterQ => '𐊨',
Carian::LetterB => '𐊩',
Carian::LetterM => '𐊪',
Carian::LetterO => '𐊫',
Carian::LetterD2 => '𐊬',
Carian::LetterT => '𐊭',
Carian::LetterSh => '𐊮',
Carian::LetterSh2 => '𐊯',
Carian::LetterS => '𐊰',
Carian::LetterCDash18 => '𐊱',
Carian::LetterU => '𐊲',
Carian::LetterNn => '𐊳',
Carian::LetterX => '𐊴',
Carian::LetterN => '𐊵',
Carian::LetterTt2 => '𐊶',
Carian::LetterP => '𐊷',
Carian::LetterSs => '𐊸',
Carian::LetterI => '𐊹',
Carian::LetterE => '𐊺',
Carian::LetterUuuu => '𐊻',
Carian::LetterK => '𐊼',
Carian::LetterK2 => '𐊽',
Carian::LetterNd => '𐊾',
Carian::LetterUu => '𐊿',
Carian::LetterG => '𐋀',
Carian::LetterG2 => '𐋁',
Carian::LetterSt => '𐋂',
Carian::LetterSt2 => '𐋃',
Carian::LetterNg => '𐋄',
Carian::LetterIi => '𐋅',
Carian::LetterCDash39 => '𐋆',
Carian::LetterTt => '𐋇',
Carian::LetterUuu2 => '𐋈',
Carian::LetterRr => '𐋉',
Carian::LetterMb => '𐋊',
Carian::LetterMb2 => '𐋋',
Carian::LetterMb3 => '𐋌',
Carian::LetterMb4 => '𐋍',
Carian::LetterLd2 => '𐋎',
Carian::LetterE2 => '𐋏',
Carian::LetterUuu3 => '𐋐',
}
}
}
impl std::convert::TryFrom<char> for Carian {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𐊠' => Ok(Carian::LetterA),
'𐊡' => Ok(Carian::LetterP2),
'𐊢' => Ok(Carian::LetterD),
'𐊣' => Ok(Carian::LetterL),
'𐊤' => Ok(Carian::LetterUuu),
'𐊥' => Ok(Carian::LetterR),
'𐊦' => Ok(Carian::LetterLd),
'𐊧' => Ok(Carian::LetterA2),
'𐊨' => Ok(Carian::LetterQ),
'𐊩' => Ok(Carian::LetterB),
'𐊪' => Ok(Carian::LetterM),
'𐊫' => Ok(Carian::LetterO),
'𐊬' => Ok(Carian::LetterD2),
'𐊭' => Ok(Carian::LetterT),
'𐊮' => Ok(Carian::LetterSh),
'𐊯' => Ok(Carian::LetterSh2),
'𐊰' => Ok(Carian::LetterS),
'𐊱' => Ok(Carian::LetterCDash18),
'𐊲' => Ok(Carian::LetterU),
'𐊳' => Ok(Carian::LetterNn),
'𐊴' => Ok(Carian::LetterX),
'𐊵' => Ok(Carian::LetterN),
'𐊶' => Ok(Carian::LetterTt2),
'𐊷' => Ok(Carian::LetterP),
'𐊸' => Ok(Carian::LetterSs),
'𐊹' => Ok(Carian::LetterI),
'𐊺' => Ok(Carian::LetterE),
'𐊻' => Ok(Carian::LetterUuuu),
'𐊼' => Ok(Carian::LetterK),
'𐊽' => Ok(Carian::LetterK2),
'𐊾' => Ok(Carian::LetterNd),
'𐊿' => Ok(Carian::LetterUu),
'𐋀' => Ok(Carian::LetterG),
'𐋁' => Ok(Carian::LetterG2),
'𐋂' => Ok(Carian::LetterSt),
'𐋃' => Ok(Carian::LetterSt2),
'𐋄' => Ok(Carian::LetterNg),
'𐋅' => Ok(Carian::LetterIi),
'𐋆' => Ok(Carian::LetterCDash39),
'𐋇' => Ok(Carian::LetterTt),
'𐋈' => Ok(Carian::LetterUuu2),
'𐋉' => Ok(Carian::LetterRr),
'𐋊' => Ok(Carian::LetterMb),
'𐋋' => Ok(Carian::LetterMb2),
'𐋌' => Ok(Carian::LetterMb3),
'𐋍' => Ok(Carian::LetterMb4),
'𐋎' => Ok(Carian::LetterLd2),
'𐋏' => Ok(Carian::LetterE2),
'𐋐' => Ok(Carian::LetterUuu3),
_ => Err(()),
}
}
}
impl Into<u32> for Carian {
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 Carian {
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 Carian {
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 Carian {
pub fn new() -> Self {
Carian::LetterA
}
pub fn name(&self) -> String {
let s = std::format!("Carian{:#?}", self);
string_morph::to_sentence_case(&s)
}
}