#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Manichaean {
LetterAleph,
LetterBeth,
LetterBheth,
LetterGimel,
LetterGhimel,
LetterDaleth,
LetterHe,
LetterWaw,
SignUd,
LetterZayin,
LetterZhayin,
LetterJayin,
LetterJhayin,
LetterHeth,
LetterTeth,
LetterYodh,
LetterKaph,
LetterXaph,
LetterKhaph,
LetterLamedh,
LetterDhamedh,
LetterThamedh,
LetterMem,
LetterNun,
LetterSamekh,
LetterAyin,
LetterAayin,
LetterPe,
LetterFe,
LetterSadhe,
LetterQoph,
LetterXoph,
LetterQhoph,
LetterResh,
LetterShin,
LetterSshin,
LetterTaw,
AbbreviationMarkAbove,
AbbreviationMarkBelow,
NumberOne,
NumberFive,
NumberTen,
NumberTwenty,
NumberOneHundred,
PunctuationStar,
PunctuationFleuron,
PunctuationDoubleDotWithinDot,
PunctuationDotWithinDot,
PunctuationDot,
PunctuationTwoDots,
PunctuationLineFiller,
}
impl Into<char> for Manichaean {
fn into(self) -> char {
match self {
Manichaean::LetterAleph => '𐫀',
Manichaean::LetterBeth => '𐫁',
Manichaean::LetterBheth => '𐫂',
Manichaean::LetterGimel => '𐫃',
Manichaean::LetterGhimel => '𐫄',
Manichaean::LetterDaleth => '𐫅',
Manichaean::LetterHe => '𐫆',
Manichaean::LetterWaw => '𐫇',
Manichaean::SignUd => '𐫈',
Manichaean::LetterZayin => '𐫉',
Manichaean::LetterZhayin => '𐫊',
Manichaean::LetterJayin => '𐫋',
Manichaean::LetterJhayin => '𐫌',
Manichaean::LetterHeth => '𐫍',
Manichaean::LetterTeth => '𐫎',
Manichaean::LetterYodh => '𐫏',
Manichaean::LetterKaph => '𐫐',
Manichaean::LetterXaph => '𐫑',
Manichaean::LetterKhaph => '𐫒',
Manichaean::LetterLamedh => '𐫓',
Manichaean::LetterDhamedh => '𐫔',
Manichaean::LetterThamedh => '𐫕',
Manichaean::LetterMem => '𐫖',
Manichaean::LetterNun => '𐫗',
Manichaean::LetterSamekh => '𐫘',
Manichaean::LetterAyin => '𐫙',
Manichaean::LetterAayin => '𐫚',
Manichaean::LetterPe => '𐫛',
Manichaean::LetterFe => '𐫜',
Manichaean::LetterSadhe => '𐫝',
Manichaean::LetterQoph => '𐫞',
Manichaean::LetterXoph => '𐫟',
Manichaean::LetterQhoph => '𐫠',
Manichaean::LetterResh => '𐫡',
Manichaean::LetterShin => '𐫢',
Manichaean::LetterSshin => '𐫣',
Manichaean::LetterTaw => '𐫤',
Manichaean::AbbreviationMarkAbove => '𐫥',
Manichaean::AbbreviationMarkBelow => '𐫦',
Manichaean::NumberOne => '𐫫',
Manichaean::NumberFive => '𐫬',
Manichaean::NumberTen => '𐫭',
Manichaean::NumberTwenty => '𐫮',
Manichaean::NumberOneHundred => '𐫯',
Manichaean::PunctuationStar => '𐫰',
Manichaean::PunctuationFleuron => '𐫱',
Manichaean::PunctuationDoubleDotWithinDot => '𐫲',
Manichaean::PunctuationDotWithinDot => '𐫳',
Manichaean::PunctuationDot => '𐫴',
Manichaean::PunctuationTwoDots => '𐫵',
Manichaean::PunctuationLineFiller => '𐫶',
}
}
}
impl std::convert::TryFrom<char> for Manichaean {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𐫀' => Ok(Manichaean::LetterAleph),
'𐫁' => Ok(Manichaean::LetterBeth),
'𐫂' => Ok(Manichaean::LetterBheth),
'𐫃' => Ok(Manichaean::LetterGimel),
'𐫄' => Ok(Manichaean::LetterGhimel),
'𐫅' => Ok(Manichaean::LetterDaleth),
'𐫆' => Ok(Manichaean::LetterHe),
'𐫇' => Ok(Manichaean::LetterWaw),
'𐫈' => Ok(Manichaean::SignUd),
'𐫉' => Ok(Manichaean::LetterZayin),
'𐫊' => Ok(Manichaean::LetterZhayin),
'𐫋' => Ok(Manichaean::LetterJayin),
'𐫌' => Ok(Manichaean::LetterJhayin),
'𐫍' => Ok(Manichaean::LetterHeth),
'𐫎' => Ok(Manichaean::LetterTeth),
'𐫏' => Ok(Manichaean::LetterYodh),
'𐫐' => Ok(Manichaean::LetterKaph),
'𐫑' => Ok(Manichaean::LetterXaph),
'𐫒' => Ok(Manichaean::LetterKhaph),
'𐫓' => Ok(Manichaean::LetterLamedh),
'𐫔' => Ok(Manichaean::LetterDhamedh),
'𐫕' => Ok(Manichaean::LetterThamedh),
'𐫖' => Ok(Manichaean::LetterMem),
'𐫗' => Ok(Manichaean::LetterNun),
'𐫘' => Ok(Manichaean::LetterSamekh),
'𐫙' => Ok(Manichaean::LetterAyin),
'𐫚' => Ok(Manichaean::LetterAayin),
'𐫛' => Ok(Manichaean::LetterPe),
'𐫜' => Ok(Manichaean::LetterFe),
'𐫝' => Ok(Manichaean::LetterSadhe),
'𐫞' => Ok(Manichaean::LetterQoph),
'𐫟' => Ok(Manichaean::LetterXoph),
'𐫠' => Ok(Manichaean::LetterQhoph),
'𐫡' => Ok(Manichaean::LetterResh),
'𐫢' => Ok(Manichaean::LetterShin),
'𐫣' => Ok(Manichaean::LetterSshin),
'𐫤' => Ok(Manichaean::LetterTaw),
'𐫥' => Ok(Manichaean::AbbreviationMarkAbove),
'𐫦' => Ok(Manichaean::AbbreviationMarkBelow),
'𐫫' => Ok(Manichaean::NumberOne),
'𐫬' => Ok(Manichaean::NumberFive),
'𐫭' => Ok(Manichaean::NumberTen),
'𐫮' => Ok(Manichaean::NumberTwenty),
'𐫯' => Ok(Manichaean::NumberOneHundred),
'𐫰' => Ok(Manichaean::PunctuationStar),
'𐫱' => Ok(Manichaean::PunctuationFleuron),
'𐫲' => Ok(Manichaean::PunctuationDoubleDotWithinDot),
'𐫳' => Ok(Manichaean::PunctuationDotWithinDot),
'𐫴' => Ok(Manichaean::PunctuationDot),
'𐫵' => Ok(Manichaean::PunctuationTwoDots),
'𐫶' => Ok(Manichaean::PunctuationLineFiller),
_ => Err(()),
}
}
}
impl Into<u32> for Manichaean {
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 Manichaean {
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 Manichaean {
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 Manichaean {
pub fn new() -> Self {
Manichaean::LetterAleph
}
pub fn name(&self) -> String {
let s = std::format!("Manichaean{:#?}", self);
string_morph::to_sentence_case(&s)
}
}