#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Makasar {
LetterKa,
LetterGa,
LetterNga,
LetterPa,
LetterBa,
LetterMa,
LetterTa,
LetterDa,
LetterNa,
LetterCa,
LetterJa,
LetterNya,
LetterYa,
LetterRa,
LetterLa,
LetterVa,
LetterSa,
LetterA,
Angka,
VowelSignI,
VowelSignU,
VowelSignE,
VowelSignO,
Passimbang,
EndOfSection,
}
impl Into<char> for Makasar {
fn into(self) -> char {
match self {
Makasar::LetterKa => '饝粻',
Makasar::LetterGa => '饝弧',
Makasar::LetterNga => '饝虎',
Makasar::LetterPa => '饝唬',
Makasar::LetterBa => '饝护',
Makasar::LetterMa => '饝互',
Makasar::LetterTa => '饝沪',
Makasar::LetterDa => '饝户',
Makasar::LetterNa => '饝花',
Makasar::LetterCa => '饝哗',
Makasar::LetterJa => '饝华',
Makasar::LetterNya => '饝猾',
Makasar::LetterYa => '饝滑',
Makasar::LetterRa => '饝画',
Makasar::LetterLa => '饝划',
Makasar::LetterVa => '饝化',
Makasar::LetterSa => '饝话',
Makasar::LetterA => '饝槐',
Makasar::Angka => '饝徊',
Makasar::VowelSignI => '饝怀',
Makasar::VowelSignU => '饝淮',
Makasar::VowelSignE => '饝坏',
Makasar::VowelSignO => '饝欢',
Makasar::Passimbang => '饝环',
Makasar::EndOfSection => '饝桓',
}
}
}
impl std::convert::TryFrom<char> for Makasar {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'饝粻' => Ok(Makasar::LetterKa),
'饝弧' => Ok(Makasar::LetterGa),
'饝虎' => Ok(Makasar::LetterNga),
'饝唬' => Ok(Makasar::LetterPa),
'饝护' => Ok(Makasar::LetterBa),
'饝互' => Ok(Makasar::LetterMa),
'饝沪' => Ok(Makasar::LetterTa),
'饝户' => Ok(Makasar::LetterDa),
'饝花' => Ok(Makasar::LetterNa),
'饝哗' => Ok(Makasar::LetterCa),
'饝华' => Ok(Makasar::LetterJa),
'饝猾' => Ok(Makasar::LetterNya),
'饝滑' => Ok(Makasar::LetterYa),
'饝画' => Ok(Makasar::LetterRa),
'饝划' => Ok(Makasar::LetterLa),
'饝化' => Ok(Makasar::LetterVa),
'饝话' => Ok(Makasar::LetterSa),
'饝槐' => Ok(Makasar::LetterA),
'饝徊' => Ok(Makasar::Angka),
'饝怀' => Ok(Makasar::VowelSignI),
'饝淮' => Ok(Makasar::VowelSignU),
'饝坏' => Ok(Makasar::VowelSignE),
'饝欢' => Ok(Makasar::VowelSignO),
'饝环' => Ok(Makasar::Passimbang),
'饝桓' => Ok(Makasar::EndOfSection),
_ => Err(()),
}
}
}
impl Into<u32> for Makasar {
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 Makasar {
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 Makasar {
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 Makasar {
pub fn new() -> Self {
Makasar::LetterKa
}
pub fn name(&self) -> String {
let s = std::format!("Makasar{:#?}", self);
string_morph::to_sentence_case(&s)
}
}