mod constants {
pub const LETTER_KA: char = '𑻠';
pub const LETTER_GA: char = '𑻡';
pub const LETTER_NGA: char = '𑻢';
pub const LETTER_PA: char = '𑻣';
pub const LETTER_BA: char = '𑻤';
pub const LETTER_MA: char = '𑻥';
pub const LETTER_TA: char = '𑻦';
pub const LETTER_DA: char = '𑻧';
pub const LETTER_NA: char = '𑻨';
pub const LETTER_CA: char = '𑻩';
pub const LETTER_JA: char = '𑻪';
pub const LETTER_NYA: char = '𑻫';
pub const LETTER_YA: char = '𑻬';
pub const LETTER_RA: char = '𑻭';
pub const LETTER_LA: char = '𑻮';
pub const LETTER_VA: char = '𑻯';
pub const LETTER_SA: char = '𑻰';
pub const LETTER_A: char = '𑻱';
pub const ANGKA: char = '𑻲';
pub const VOWEL_SIGN_I: char = '𑻳';
pub const VOWEL_SIGN_U: char = '𑻴';
pub const VOWEL_SIGN_E: char = '𑻵';
pub const VOWEL_SIGN_O: char = '𑻶';
pub const PASSIMBANG: char = '𑻷';
pub const END_OF_SECTION: char = '𑻸';
}
#[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 {
use constants::*;
match self {
Makasar::LetterKa => LETTER_KA,
Makasar::LetterGa => LETTER_GA,
Makasar::LetterNga => LETTER_NGA,
Makasar::LetterPa => LETTER_PA,
Makasar::LetterBa => LETTER_BA,
Makasar::LetterMa => LETTER_MA,
Makasar::LetterTa => LETTER_TA,
Makasar::LetterDa => LETTER_DA,
Makasar::LetterNa => LETTER_NA,
Makasar::LetterCa => LETTER_CA,
Makasar::LetterJa => LETTER_JA,
Makasar::LetterNya => LETTER_NYA,
Makasar::LetterYa => LETTER_YA,
Makasar::LetterRa => LETTER_RA,
Makasar::LetterLa => LETTER_LA,
Makasar::LetterVa => LETTER_VA,
Makasar::LetterSa => LETTER_SA,
Makasar::LetterA => LETTER_A,
Makasar::Angka => ANGKA,
Makasar::VowelSignI => VOWEL_SIGN_I,
Makasar::VowelSignU => VOWEL_SIGN_U,
Makasar::VowelSignE => VOWEL_SIGN_E,
Makasar::VowelSignO => VOWEL_SIGN_O,
Makasar::Passimbang => PASSIMBANG,
Makasar::EndOfSection => END_OF_SECTION,
}
}
}
impl std::convert::TryFrom<char> for Makasar {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_KA => Ok(Makasar::LetterKa),
LETTER_GA => Ok(Makasar::LetterGa),
LETTER_NGA => Ok(Makasar::LetterNga),
LETTER_PA => Ok(Makasar::LetterPa),
LETTER_BA => Ok(Makasar::LetterBa),
LETTER_MA => Ok(Makasar::LetterMa),
LETTER_TA => Ok(Makasar::LetterTa),
LETTER_DA => Ok(Makasar::LetterDa),
LETTER_NA => Ok(Makasar::LetterNa),
LETTER_CA => Ok(Makasar::LetterCa),
LETTER_JA => Ok(Makasar::LetterJa),
LETTER_NYA => Ok(Makasar::LetterNya),
LETTER_YA => Ok(Makasar::LetterYa),
LETTER_RA => Ok(Makasar::LetterRa),
LETTER_LA => Ok(Makasar::LetterLa),
LETTER_VA => Ok(Makasar::LetterVa),
LETTER_SA => Ok(Makasar::LetterSa),
LETTER_A => Ok(Makasar::LetterA),
ANGKA => Ok(Makasar::Angka),
VOWEL_SIGN_I => Ok(Makasar::VowelSignI),
VOWEL_SIGN_U => Ok(Makasar::VowelSignU),
VOWEL_SIGN_E => Ok(Makasar::VowelSignE),
VOWEL_SIGN_O => Ok(Makasar::VowelSignO),
PASSIMBANG => Ok(Makasar::Passimbang),
END_OF_SECTION => 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) -> &str {
match self {
Makasar::LetterKa => "makasar letter ka",
Makasar::LetterGa => "makasar letter ga",
Makasar::LetterNga => "makasar letter nga",
Makasar::LetterPa => "makasar letter pa",
Makasar::LetterBa => "makasar letter ba",
Makasar::LetterMa => "makasar letter ma",
Makasar::LetterTa => "makasar letter ta",
Makasar::LetterDa => "makasar letter da",
Makasar::LetterNa => "makasar letter na",
Makasar::LetterCa => "makasar letter ca",
Makasar::LetterJa => "makasar letter ja",
Makasar::LetterNya => "makasar letter nya",
Makasar::LetterYa => "makasar letter ya",
Makasar::LetterRa => "makasar letter ra",
Makasar::LetterLa => "makasar letter la",
Makasar::LetterVa => "makasar letter va",
Makasar::LetterSa => "makasar letter sa",
Makasar::LetterA => "makasar letter a",
Makasar::Angka => "makasar angka",
Makasar::VowelSignI => "makasar vowel sign i",
Makasar::VowelSignU => "makasar vowel sign u",
Makasar::VowelSignE => "makasar vowel sign e",
Makasar::VowelSignO => "makasar vowel sign o",
Makasar::Passimbang => "makasar passimbang",
Makasar::EndOfSection => "makasar end of section",
}
}
}