#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Deseret {
CapitalLetterLongI,
CapitalLetterLongE,
CapitalLetterLongA,
CapitalLetterLongAh,
CapitalLetterLongO,
CapitalLetterLongOo,
CapitalLetterShortI,
CapitalLetterShortE,
CapitalLetterShortA,
CapitalLetterShortAh,
CapitalLetterShortO,
CapitalLetterShortOo,
CapitalLetterAy,
CapitalLetterOw,
CapitalLetterWu,
CapitalLetterYee,
CapitalLetterH,
CapitalLetterPee,
CapitalLetterBee,
CapitalLetterTee,
CapitalLetterDee,
CapitalLetterChee,
CapitalLetterJee,
CapitalLetterKay,
CapitalLetterGay,
CapitalLetterEf,
CapitalLetterVee,
CapitalLetterEth,
CapitalLetterThee,
CapitalLetterEs,
CapitalLetterZee,
CapitalLetterEsh,
CapitalLetterZhee,
CapitalLetterEr,
CapitalLetterEl,
CapitalLetterEm,
CapitalLetterEn,
CapitalLetterEng,
CapitalLetterOi,
CapitalLetterEw,
SmallLetterLongI,
SmallLetterLongE,
SmallLetterLongA,
SmallLetterLongAh,
SmallLetterLongO,
SmallLetterLongOo,
SmallLetterShortI,
SmallLetterShortE,
SmallLetterShortA,
SmallLetterShortAh,
SmallLetterShortO,
SmallLetterShortOo,
SmallLetterAy,
SmallLetterOw,
SmallLetterWu,
SmallLetterYee,
SmallLetterH,
SmallLetterPee,
SmallLetterBee,
SmallLetterTee,
SmallLetterDee,
SmallLetterChee,
SmallLetterJee,
SmallLetterKay,
SmallLetterGay,
SmallLetterEf,
SmallLetterVee,
SmallLetterEth,
SmallLetterThee,
SmallLetterEs,
SmallLetterZee,
SmallLetterEsh,
SmallLetterZhee,
SmallLetterEr,
SmallLetterEl,
SmallLetterEm,
SmallLetterEn,
SmallLetterEng,
SmallLetterOi,
}
impl Into<char> for Deseret {
fn into(self) -> char {
match self {
Deseret::CapitalLetterLongI => '𐐀',
Deseret::CapitalLetterLongE => '𐐁',
Deseret::CapitalLetterLongA => '𐐂',
Deseret::CapitalLetterLongAh => '𐐃',
Deseret::CapitalLetterLongO => '𐐄',
Deseret::CapitalLetterLongOo => '𐐅',
Deseret::CapitalLetterShortI => '𐐆',
Deseret::CapitalLetterShortE => '𐐇',
Deseret::CapitalLetterShortA => '𐐈',
Deseret::CapitalLetterShortAh => '𐐉',
Deseret::CapitalLetterShortO => '𐐊',
Deseret::CapitalLetterShortOo => '𐐋',
Deseret::CapitalLetterAy => '𐐌',
Deseret::CapitalLetterOw => '𐐍',
Deseret::CapitalLetterWu => '𐐎',
Deseret::CapitalLetterYee => '𐐏',
Deseret::CapitalLetterH => '𐐐',
Deseret::CapitalLetterPee => '𐐑',
Deseret::CapitalLetterBee => '𐐒',
Deseret::CapitalLetterTee => '𐐓',
Deseret::CapitalLetterDee => '𐐔',
Deseret::CapitalLetterChee => '𐐕',
Deseret::CapitalLetterJee => '𐐖',
Deseret::CapitalLetterKay => '𐐗',
Deseret::CapitalLetterGay => '𐐘',
Deseret::CapitalLetterEf => '𐐙',
Deseret::CapitalLetterVee => '𐐚',
Deseret::CapitalLetterEth => '𐐛',
Deseret::CapitalLetterThee => '𐐜',
Deseret::CapitalLetterEs => '𐐝',
Deseret::CapitalLetterZee => '𐐞',
Deseret::CapitalLetterEsh => '𐐟',
Deseret::CapitalLetterZhee => '𐐠',
Deseret::CapitalLetterEr => '𐐡',
Deseret::CapitalLetterEl => '𐐢',
Deseret::CapitalLetterEm => '𐐣',
Deseret::CapitalLetterEn => '𐐤',
Deseret::CapitalLetterEng => '𐐥',
Deseret::CapitalLetterOi => '𐐦',
Deseret::CapitalLetterEw => '𐐧',
Deseret::SmallLetterLongI => '𐐨',
Deseret::SmallLetterLongE => '𐐩',
Deseret::SmallLetterLongA => '𐐪',
Deseret::SmallLetterLongAh => '𐐫',
Deseret::SmallLetterLongO => '𐐬',
Deseret::SmallLetterLongOo => '𐐭',
Deseret::SmallLetterShortI => '𐐮',
Deseret::SmallLetterShortE => '𐐯',
Deseret::SmallLetterShortA => '𐐰',
Deseret::SmallLetterShortAh => '𐐱',
Deseret::SmallLetterShortO => '𐐲',
Deseret::SmallLetterShortOo => '𐐳',
Deseret::SmallLetterAy => '𐐴',
Deseret::SmallLetterOw => '𐐵',
Deseret::SmallLetterWu => '𐐶',
Deseret::SmallLetterYee => '𐐷',
Deseret::SmallLetterH => '𐐸',
Deseret::SmallLetterPee => '𐐹',
Deseret::SmallLetterBee => '𐐺',
Deseret::SmallLetterTee => '𐐻',
Deseret::SmallLetterDee => '𐐼',
Deseret::SmallLetterChee => '𐐽',
Deseret::SmallLetterJee => '𐐾',
Deseret::SmallLetterKay => '𐐿',
Deseret::SmallLetterGay => '𐑀',
Deseret::SmallLetterEf => '𐑁',
Deseret::SmallLetterVee => '𐑂',
Deseret::SmallLetterEth => '𐑃',
Deseret::SmallLetterThee => '𐑄',
Deseret::SmallLetterEs => '𐑅',
Deseret::SmallLetterZee => '𐑆',
Deseret::SmallLetterEsh => '𐑇',
Deseret::SmallLetterZhee => '𐑈',
Deseret::SmallLetterEr => '𐑉',
Deseret::SmallLetterEl => '𐑊',
Deseret::SmallLetterEm => '𐑋',
Deseret::SmallLetterEn => '𐑌',
Deseret::SmallLetterEng => '𐑍',
Deseret::SmallLetterOi => '𐑎',
}
}
}
impl std::convert::TryFrom<char> for Deseret {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𐐀' => Ok(Deseret::CapitalLetterLongI),
'𐐁' => Ok(Deseret::CapitalLetterLongE),
'𐐂' => Ok(Deseret::CapitalLetterLongA),
'𐐃' => Ok(Deseret::CapitalLetterLongAh),
'𐐄' => Ok(Deseret::CapitalLetterLongO),
'𐐅' => Ok(Deseret::CapitalLetterLongOo),
'𐐆' => Ok(Deseret::CapitalLetterShortI),
'𐐇' => Ok(Deseret::CapitalLetterShortE),
'𐐈' => Ok(Deseret::CapitalLetterShortA),
'𐐉' => Ok(Deseret::CapitalLetterShortAh),
'𐐊' => Ok(Deseret::CapitalLetterShortO),
'𐐋' => Ok(Deseret::CapitalLetterShortOo),
'𐐌' => Ok(Deseret::CapitalLetterAy),
'𐐍' => Ok(Deseret::CapitalLetterOw),
'𐐎' => Ok(Deseret::CapitalLetterWu),
'𐐏' => Ok(Deseret::CapitalLetterYee),
'𐐐' => Ok(Deseret::CapitalLetterH),
'𐐑' => Ok(Deseret::CapitalLetterPee),
'𐐒' => Ok(Deseret::CapitalLetterBee),
'𐐓' => Ok(Deseret::CapitalLetterTee),
'𐐔' => Ok(Deseret::CapitalLetterDee),
'𐐕' => Ok(Deseret::CapitalLetterChee),
'𐐖' => Ok(Deseret::CapitalLetterJee),
'𐐗' => Ok(Deseret::CapitalLetterKay),
'𐐘' => Ok(Deseret::CapitalLetterGay),
'𐐙' => Ok(Deseret::CapitalLetterEf),
'𐐚' => Ok(Deseret::CapitalLetterVee),
'𐐛' => Ok(Deseret::CapitalLetterEth),
'𐐜' => Ok(Deseret::CapitalLetterThee),
'𐐝' => Ok(Deseret::CapitalLetterEs),
'𐐞' => Ok(Deseret::CapitalLetterZee),
'𐐟' => Ok(Deseret::CapitalLetterEsh),
'𐐠' => Ok(Deseret::CapitalLetterZhee),
'𐐡' => Ok(Deseret::CapitalLetterEr),
'𐐢' => Ok(Deseret::CapitalLetterEl),
'𐐣' => Ok(Deseret::CapitalLetterEm),
'𐐤' => Ok(Deseret::CapitalLetterEn),
'𐐥' => Ok(Deseret::CapitalLetterEng),
'𐐦' => Ok(Deseret::CapitalLetterOi),
'𐐧' => Ok(Deseret::CapitalLetterEw),
'𐐨' => Ok(Deseret::SmallLetterLongI),
'𐐩' => Ok(Deseret::SmallLetterLongE),
'𐐪' => Ok(Deseret::SmallLetterLongA),
'𐐫' => Ok(Deseret::SmallLetterLongAh),
'𐐬' => Ok(Deseret::SmallLetterLongO),
'𐐭' => Ok(Deseret::SmallLetterLongOo),
'𐐮' => Ok(Deseret::SmallLetterShortI),
'𐐯' => Ok(Deseret::SmallLetterShortE),
'𐐰' => Ok(Deseret::SmallLetterShortA),
'𐐱' => Ok(Deseret::SmallLetterShortAh),
'𐐲' => Ok(Deseret::SmallLetterShortO),
'𐐳' => Ok(Deseret::SmallLetterShortOo),
'𐐴' => Ok(Deseret::SmallLetterAy),
'𐐵' => Ok(Deseret::SmallLetterOw),
'𐐶' => Ok(Deseret::SmallLetterWu),
'𐐷' => Ok(Deseret::SmallLetterYee),
'𐐸' => Ok(Deseret::SmallLetterH),
'𐐹' => Ok(Deseret::SmallLetterPee),
'𐐺' => Ok(Deseret::SmallLetterBee),
'𐐻' => Ok(Deseret::SmallLetterTee),
'𐐼' => Ok(Deseret::SmallLetterDee),
'𐐽' => Ok(Deseret::SmallLetterChee),
'𐐾' => Ok(Deseret::SmallLetterJee),
'𐐿' => Ok(Deseret::SmallLetterKay),
'𐑀' => Ok(Deseret::SmallLetterGay),
'𐑁' => Ok(Deseret::SmallLetterEf),
'𐑂' => Ok(Deseret::SmallLetterVee),
'𐑃' => Ok(Deseret::SmallLetterEth),
'𐑄' => Ok(Deseret::SmallLetterThee),
'𐑅' => Ok(Deseret::SmallLetterEs),
'𐑆' => Ok(Deseret::SmallLetterZee),
'𐑇' => Ok(Deseret::SmallLetterEsh),
'𐑈' => Ok(Deseret::SmallLetterZhee),
'𐑉' => Ok(Deseret::SmallLetterEr),
'𐑊' => Ok(Deseret::SmallLetterEl),
'𐑋' => Ok(Deseret::SmallLetterEm),
'𐑌' => Ok(Deseret::SmallLetterEn),
'𐑍' => Ok(Deseret::SmallLetterEng),
'𐑎' => Ok(Deseret::SmallLetterOi),
_ => Err(()),
}
}
}
impl Into<u32> for Deseret {
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 Deseret {
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 Deseret {
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 Deseret {
pub fn new() -> Self {
Deseret::CapitalLetterLongI
}
pub fn name(&self) -> String {
let s = std::format!("Deseret{:#?}", self);
string_morph::to_sentence_case(&s)
}
}