#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Marchen {
HeadMark,
MarkShad,
LetterKa,
LetterKha,
LetterGa,
LetterNga,
LetterCa,
LetterCha,
LetterJa,
LetterNya,
LetterTa,
LetterTha,
LetterDa,
LetterNa,
LetterPa,
LetterPha,
LetterBa,
LetterMa,
LetterTsa,
LetterTsha,
LetterDza,
LetterWa,
LetterZha,
LetterZa,
LetterDashA,
LetterYa,
LetterRa,
LetterLa,
LetterSha,
LetterSa,
LetterHa,
LetterA,
SubjoinedLetterKa,
SubjoinedLetterKha,
SubjoinedLetterGa,
SubjoinedLetterNga,
SubjoinedLetterCa,
SubjoinedLetterCha,
SubjoinedLetterJa,
SubjoinedLetterNya,
SubjoinedLetterTa,
SubjoinedLetterTha,
SubjoinedLetterDa,
SubjoinedLetterNa,
SubjoinedLetterPa,
SubjoinedLetterPha,
SubjoinedLetterBa,
SubjoinedLetterMa,
SubjoinedLetterTsa,
SubjoinedLetterTsha,
SubjoinedLetterDza,
SubjoinedLetterWa,
SubjoinedLetterZha,
SubjoinedLetterZa,
SubjoinedLetterYa,
SubjoinedLetterRa,
SubjoinedLetterLa,
SubjoinedLetterSha,
SubjoinedLetterSa,
SubjoinedLetterHa,
SubjoinedLetterA,
VowelSignAa,
VowelSignI,
VowelSignU,
VowelSignE,
VowelSignO,
SignAnusvara,
SignCandrabindu,
}
impl Into<char> for Marchen {
fn into(self) -> char {
match self {
Marchen::HeadMark => '𑱰',
Marchen::MarkShad => '𑱱',
Marchen::LetterKa => '𑱲',
Marchen::LetterKha => '𑱳',
Marchen::LetterGa => '𑱴',
Marchen::LetterNga => '𑱵',
Marchen::LetterCa => '𑱶',
Marchen::LetterCha => '𑱷',
Marchen::LetterJa => '𑱸',
Marchen::LetterNya => '𑱹',
Marchen::LetterTa => '𑱺',
Marchen::LetterTha => '𑱻',
Marchen::LetterDa => '𑱼',
Marchen::LetterNa => '𑱽',
Marchen::LetterPa => '𑱾',
Marchen::LetterPha => '𑱿',
Marchen::LetterBa => '𑲀',
Marchen::LetterMa => '𑲁',
Marchen::LetterTsa => '𑲂',
Marchen::LetterTsha => '𑲃',
Marchen::LetterDza => '𑲄',
Marchen::LetterWa => '𑲅',
Marchen::LetterZha => '𑲆',
Marchen::LetterZa => '𑲇',
Marchen::LetterDashA => '𑲈',
Marchen::LetterYa => '𑲉',
Marchen::LetterRa => '𑲊',
Marchen::LetterLa => '𑲋',
Marchen::LetterSha => '𑲌',
Marchen::LetterSa => '𑲍',
Marchen::LetterHa => '𑲎',
Marchen::LetterA => '𑲏',
Marchen::SubjoinedLetterKa => '𑲒',
Marchen::SubjoinedLetterKha => '𑲓',
Marchen::SubjoinedLetterGa => '𑲔',
Marchen::SubjoinedLetterNga => '𑲕',
Marchen::SubjoinedLetterCa => '𑲖',
Marchen::SubjoinedLetterCha => '𑲗',
Marchen::SubjoinedLetterJa => '𑲘',
Marchen::SubjoinedLetterNya => '𑲙',
Marchen::SubjoinedLetterTa => '𑲚',
Marchen::SubjoinedLetterTha => '𑲛',
Marchen::SubjoinedLetterDa => '𑲜',
Marchen::SubjoinedLetterNa => '𑲝',
Marchen::SubjoinedLetterPa => '𑲞',
Marchen::SubjoinedLetterPha => '𑲟',
Marchen::SubjoinedLetterBa => '𑲠',
Marchen::SubjoinedLetterMa => '𑲡',
Marchen::SubjoinedLetterTsa => '𑲢',
Marchen::SubjoinedLetterTsha => '𑲣',
Marchen::SubjoinedLetterDza => '𑲤',
Marchen::SubjoinedLetterWa => '𑲥',
Marchen::SubjoinedLetterZha => '𑲦',
Marchen::SubjoinedLetterZa => '𑲧',
Marchen::SubjoinedLetterYa => '𑲩',
Marchen::SubjoinedLetterRa => '𑲪',
Marchen::SubjoinedLetterLa => '𑲫',
Marchen::SubjoinedLetterSha => '𑲬',
Marchen::SubjoinedLetterSa => '𑲭',
Marchen::SubjoinedLetterHa => '𑲮',
Marchen::SubjoinedLetterA => '𑲯',
Marchen::VowelSignAa => '𑲰',
Marchen::VowelSignI => '𑲱',
Marchen::VowelSignU => '𑲲',
Marchen::VowelSignE => '𑲳',
Marchen::VowelSignO => '𑲴',
Marchen::SignAnusvara => '𑲵',
Marchen::SignCandrabindu => '𑲶',
}
}
}
impl std::convert::TryFrom<char> for Marchen {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𑱰' => Ok(Marchen::HeadMark),
'𑱱' => Ok(Marchen::MarkShad),
'𑱲' => Ok(Marchen::LetterKa),
'𑱳' => Ok(Marchen::LetterKha),
'𑱴' => Ok(Marchen::LetterGa),
'𑱵' => Ok(Marchen::LetterNga),
'𑱶' => Ok(Marchen::LetterCa),
'𑱷' => Ok(Marchen::LetterCha),
'𑱸' => Ok(Marchen::LetterJa),
'𑱹' => Ok(Marchen::LetterNya),
'𑱺' => Ok(Marchen::LetterTa),
'𑱻' => Ok(Marchen::LetterTha),
'𑱼' => Ok(Marchen::LetterDa),
'𑱽' => Ok(Marchen::LetterNa),
'𑱾' => Ok(Marchen::LetterPa),
'𑱿' => Ok(Marchen::LetterPha),
'𑲀' => Ok(Marchen::LetterBa),
'𑲁' => Ok(Marchen::LetterMa),
'𑲂' => Ok(Marchen::LetterTsa),
'𑲃' => Ok(Marchen::LetterTsha),
'𑲄' => Ok(Marchen::LetterDza),
'𑲅' => Ok(Marchen::LetterWa),
'𑲆' => Ok(Marchen::LetterZha),
'𑲇' => Ok(Marchen::LetterZa),
'𑲈' => Ok(Marchen::LetterDashA),
'𑲉' => Ok(Marchen::LetterYa),
'𑲊' => Ok(Marchen::LetterRa),
'𑲋' => Ok(Marchen::LetterLa),
'𑲌' => Ok(Marchen::LetterSha),
'𑲍' => Ok(Marchen::LetterSa),
'𑲎' => Ok(Marchen::LetterHa),
'𑲏' => Ok(Marchen::LetterA),
'𑲒' => Ok(Marchen::SubjoinedLetterKa),
'𑲓' => Ok(Marchen::SubjoinedLetterKha),
'𑲔' => Ok(Marchen::SubjoinedLetterGa),
'𑲕' => Ok(Marchen::SubjoinedLetterNga),
'𑲖' => Ok(Marchen::SubjoinedLetterCa),
'𑲗' => Ok(Marchen::SubjoinedLetterCha),
'𑲘' => Ok(Marchen::SubjoinedLetterJa),
'𑲙' => Ok(Marchen::SubjoinedLetterNya),
'𑲚' => Ok(Marchen::SubjoinedLetterTa),
'𑲛' => Ok(Marchen::SubjoinedLetterTha),
'𑲜' => Ok(Marchen::SubjoinedLetterDa),
'𑲝' => Ok(Marchen::SubjoinedLetterNa),
'𑲞' => Ok(Marchen::SubjoinedLetterPa),
'𑲟' => Ok(Marchen::SubjoinedLetterPha),
'𑲠' => Ok(Marchen::SubjoinedLetterBa),
'𑲡' => Ok(Marchen::SubjoinedLetterMa),
'𑲢' => Ok(Marchen::SubjoinedLetterTsa),
'𑲣' => Ok(Marchen::SubjoinedLetterTsha),
'𑲤' => Ok(Marchen::SubjoinedLetterDza),
'𑲥' => Ok(Marchen::SubjoinedLetterWa),
'𑲦' => Ok(Marchen::SubjoinedLetterZha),
'𑲧' => Ok(Marchen::SubjoinedLetterZa),
'𑲩' => Ok(Marchen::SubjoinedLetterYa),
'𑲪' => Ok(Marchen::SubjoinedLetterRa),
'𑲫' => Ok(Marchen::SubjoinedLetterLa),
'𑲬' => Ok(Marchen::SubjoinedLetterSha),
'𑲭' => Ok(Marchen::SubjoinedLetterSa),
'𑲮' => Ok(Marchen::SubjoinedLetterHa),
'𑲯' => Ok(Marchen::SubjoinedLetterA),
'𑲰' => Ok(Marchen::VowelSignAa),
'𑲱' => Ok(Marchen::VowelSignI),
'𑲲' => Ok(Marchen::VowelSignU),
'𑲳' => Ok(Marchen::VowelSignE),
'𑲴' => Ok(Marchen::VowelSignO),
'𑲵' => Ok(Marchen::SignAnusvara),
'𑲶' => Ok(Marchen::SignCandrabindu),
_ => Err(()),
}
}
}
impl Into<u32> for Marchen {
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 Marchen {
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 Marchen {
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 Marchen {
pub fn new() -> Self {
Marchen::HeadMark
}
pub fn name(&self) -> String {
let s = std::format!("Marchen{:#?}", self);
string_morph::to_sentence_case(&s)
}
}