mod constants {
pub const LETTER_A: char = 'ᯀ';
pub const LETTER_SIMALUNGUN_A: char = 'ᯁ';
pub const LETTER_HA: char = 'ᯂ';
pub const LETTER_SIMALUNGUN_HA: char = 'ᯃ';
pub const LETTER_MANDAILING_HA: char = 'ᯄ';
pub const LETTER_BA: char = 'ᯅ';
pub const LETTER_KARO_BA: char = 'ᯆ';
pub const LETTER_PA: char = 'ᯇ';
pub const LETTER_SIMALUNGUN_PA: char = 'ᯈ';
pub const LETTER_NA: char = 'ᯉ';
pub const LETTER_MANDAILING_NA: char = 'ᯊ';
pub const LETTER_WA: char = 'ᯋ';
pub const LETTER_SIMALUNGUN_WA: char = 'ᯌ';
pub const LETTER_PAKPAK_WA: char = 'ᯍ';
pub const LETTER_GA: char = 'ᯎ';
pub const LETTER_SIMALUNGUN_GA: char = 'ᯏ';
pub const LETTER_JA: char = 'ᯐ';
pub const LETTER_DA: char = 'ᯑ';
pub const LETTER_RA: char = 'ᯒ';
pub const LETTER_SIMALUNGUN_RA: char = 'ᯓ';
pub const LETTER_MA: char = 'ᯔ';
pub const LETTER_SIMALUNGUN_MA: char = 'ᯕ';
pub const LETTER_SOUTHERN_TA: char = 'ᯖ';
pub const LETTER_NORTHERN_TA: char = 'ᯗ';
pub const LETTER_SA: char = 'ᯘ';
pub const LETTER_SIMALUNGUN_SA: char = 'ᯙ';
pub const LETTER_MANDAILING_SA: char = 'ᯚ';
pub const LETTER_YA: char = 'ᯛ';
pub const LETTER_SIMALUNGUN_YA: char = 'ᯜ';
pub const LETTER_NGA: char = 'ᯝ';
pub const LETTER_LA: char = 'ᯞ';
pub const LETTER_SIMALUNGUN_LA: char = 'ᯟ';
pub const LETTER_NYA: char = 'ᯠ';
pub const LETTER_CA: char = 'ᯡ';
pub const LETTER_NDA: char = 'ᯢ';
pub const LETTER_MBA: char = 'ᯣ';
pub const LETTER_I: char = 'ᯤ';
pub const LETTER_U: char = 'ᯥ';
pub const SIGN_TOMPI: char = '᯦';
pub const VOWEL_SIGN_E: char = 'ᯧ';
pub const VOWEL_SIGN_PAKPAK_E: char = 'ᯨ';
pub const VOWEL_SIGN_EE: char = 'ᯩ';
pub const VOWEL_SIGN_I: char = 'ᯪ';
pub const VOWEL_SIGN_KARO_I: char = 'ᯫ';
pub const VOWEL_SIGN_O: char = 'ᯬ';
pub const VOWEL_SIGN_KARO_O: char = 'ᯭ';
pub const VOWEL_SIGN_U: char = 'ᯮ';
pub const VOWEL_SIGN_U_FOR_SIMALUNGUN_SA: char = 'ᯯ';
pub const CONSONANT_SIGN_NG: char = 'ᯰ';
pub const CONSONANT_SIGN_H: char = 'ᯱ';
pub const PANGOLAT: char = '᯲';
pub const PANONGONAN: char = '᯳';
pub const SYMBOL_BINDU_NA_METEK: char = '᯼';
pub const SYMBOL_BINDU_PINARBORAS: char = '᯽';
pub const SYMBOL_BINDU_JUDUL: char = '᯾';
}
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Batak {
LetterA,
LetterSimalungunA,
LetterHa,
LetterSimalungunHa,
LetterMandailingHa,
LetterBa,
LetterKaroBa,
LetterPa,
LetterSimalungunPa,
LetterNa,
LetterMandailingNa,
LetterWa,
LetterSimalungunWa,
LetterPakpakWa,
LetterGa,
LetterSimalungunGa,
LetterJa,
LetterDa,
LetterRa,
LetterSimalungunRa,
LetterMa,
LetterSimalungunMa,
LetterSouthernTa,
LetterNorthernTa,
LetterSa,
LetterSimalungunSa,
LetterMandailingSa,
LetterYa,
LetterSimalungunYa,
LetterNga,
LetterLa,
LetterSimalungunLa,
LetterNya,
LetterCa,
LetterNda,
LetterMba,
LetterI,
LetterU,
SignTompi,
VowelSignE,
VowelSignPakpakE,
VowelSignEe,
VowelSignI,
VowelSignKaroI,
VowelSignO,
VowelSignKaroO,
VowelSignU,
VowelSignUForSimalungunSa,
ConsonantSignNg,
ConsonantSignH,
Pangolat,
Panongonan,
SymbolBinduNaMetek,
SymbolBinduPinarboras,
SymbolBinduJudul,
}
impl Into<char> for Batak {
fn into(self) -> char {
use constants::*;
match self {
Batak::LetterA => LETTER_A,
Batak::LetterSimalungunA => LETTER_SIMALUNGUN_A,
Batak::LetterHa => LETTER_HA,
Batak::LetterSimalungunHa => LETTER_SIMALUNGUN_HA,
Batak::LetterMandailingHa => LETTER_MANDAILING_HA,
Batak::LetterBa => LETTER_BA,
Batak::LetterKaroBa => LETTER_KARO_BA,
Batak::LetterPa => LETTER_PA,
Batak::LetterSimalungunPa => LETTER_SIMALUNGUN_PA,
Batak::LetterNa => LETTER_NA,
Batak::LetterMandailingNa => LETTER_MANDAILING_NA,
Batak::LetterWa => LETTER_WA,
Batak::LetterSimalungunWa => LETTER_SIMALUNGUN_WA,
Batak::LetterPakpakWa => LETTER_PAKPAK_WA,
Batak::LetterGa => LETTER_GA,
Batak::LetterSimalungunGa => LETTER_SIMALUNGUN_GA,
Batak::LetterJa => LETTER_JA,
Batak::LetterDa => LETTER_DA,
Batak::LetterRa => LETTER_RA,
Batak::LetterSimalungunRa => LETTER_SIMALUNGUN_RA,
Batak::LetterMa => LETTER_MA,
Batak::LetterSimalungunMa => LETTER_SIMALUNGUN_MA,
Batak::LetterSouthernTa => LETTER_SOUTHERN_TA,
Batak::LetterNorthernTa => LETTER_NORTHERN_TA,
Batak::LetterSa => LETTER_SA,
Batak::LetterSimalungunSa => LETTER_SIMALUNGUN_SA,
Batak::LetterMandailingSa => LETTER_MANDAILING_SA,
Batak::LetterYa => LETTER_YA,
Batak::LetterSimalungunYa => LETTER_SIMALUNGUN_YA,
Batak::LetterNga => LETTER_NGA,
Batak::LetterLa => LETTER_LA,
Batak::LetterSimalungunLa => LETTER_SIMALUNGUN_LA,
Batak::LetterNya => LETTER_NYA,
Batak::LetterCa => LETTER_CA,
Batak::LetterNda => LETTER_NDA,
Batak::LetterMba => LETTER_MBA,
Batak::LetterI => LETTER_I,
Batak::LetterU => LETTER_U,
Batak::SignTompi => SIGN_TOMPI,
Batak::VowelSignE => VOWEL_SIGN_E,
Batak::VowelSignPakpakE => VOWEL_SIGN_PAKPAK_E,
Batak::VowelSignEe => VOWEL_SIGN_EE,
Batak::VowelSignI => VOWEL_SIGN_I,
Batak::VowelSignKaroI => VOWEL_SIGN_KARO_I,
Batak::VowelSignO => VOWEL_SIGN_O,
Batak::VowelSignKaroO => VOWEL_SIGN_KARO_O,
Batak::VowelSignU => VOWEL_SIGN_U,
Batak::VowelSignUForSimalungunSa => VOWEL_SIGN_U_FOR_SIMALUNGUN_SA,
Batak::ConsonantSignNg => CONSONANT_SIGN_NG,
Batak::ConsonantSignH => CONSONANT_SIGN_H,
Batak::Pangolat => PANGOLAT,
Batak::Panongonan => PANONGONAN,
Batak::SymbolBinduNaMetek => SYMBOL_BINDU_NA_METEK,
Batak::SymbolBinduPinarboras => SYMBOL_BINDU_PINARBORAS,
Batak::SymbolBinduJudul => SYMBOL_BINDU_JUDUL,
}
}
}
impl std::convert::TryFrom<char> for Batak {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
use constants::*;
match c {
LETTER_A => Ok(Batak::LetterA),
LETTER_SIMALUNGUN_A => Ok(Batak::LetterSimalungunA),
LETTER_HA => Ok(Batak::LetterHa),
LETTER_SIMALUNGUN_HA => Ok(Batak::LetterSimalungunHa),
LETTER_MANDAILING_HA => Ok(Batak::LetterMandailingHa),
LETTER_BA => Ok(Batak::LetterBa),
LETTER_KARO_BA => Ok(Batak::LetterKaroBa),
LETTER_PA => Ok(Batak::LetterPa),
LETTER_SIMALUNGUN_PA => Ok(Batak::LetterSimalungunPa),
LETTER_NA => Ok(Batak::LetterNa),
LETTER_MANDAILING_NA => Ok(Batak::LetterMandailingNa),
LETTER_WA => Ok(Batak::LetterWa),
LETTER_SIMALUNGUN_WA => Ok(Batak::LetterSimalungunWa),
LETTER_PAKPAK_WA => Ok(Batak::LetterPakpakWa),
LETTER_GA => Ok(Batak::LetterGa),
LETTER_SIMALUNGUN_GA => Ok(Batak::LetterSimalungunGa),
LETTER_JA => Ok(Batak::LetterJa),
LETTER_DA => Ok(Batak::LetterDa),
LETTER_RA => Ok(Batak::LetterRa),
LETTER_SIMALUNGUN_RA => Ok(Batak::LetterSimalungunRa),
LETTER_MA => Ok(Batak::LetterMa),
LETTER_SIMALUNGUN_MA => Ok(Batak::LetterSimalungunMa),
LETTER_SOUTHERN_TA => Ok(Batak::LetterSouthernTa),
LETTER_NORTHERN_TA => Ok(Batak::LetterNorthernTa),
LETTER_SA => Ok(Batak::LetterSa),
LETTER_SIMALUNGUN_SA => Ok(Batak::LetterSimalungunSa),
LETTER_MANDAILING_SA => Ok(Batak::LetterMandailingSa),
LETTER_YA => Ok(Batak::LetterYa),
LETTER_SIMALUNGUN_YA => Ok(Batak::LetterSimalungunYa),
LETTER_NGA => Ok(Batak::LetterNga),
LETTER_LA => Ok(Batak::LetterLa),
LETTER_SIMALUNGUN_LA => Ok(Batak::LetterSimalungunLa),
LETTER_NYA => Ok(Batak::LetterNya),
LETTER_CA => Ok(Batak::LetterCa),
LETTER_NDA => Ok(Batak::LetterNda),
LETTER_MBA => Ok(Batak::LetterMba),
LETTER_I => Ok(Batak::LetterI),
LETTER_U => Ok(Batak::LetterU),
SIGN_TOMPI => Ok(Batak::SignTompi),
VOWEL_SIGN_E => Ok(Batak::VowelSignE),
VOWEL_SIGN_PAKPAK_E => Ok(Batak::VowelSignPakpakE),
VOWEL_SIGN_EE => Ok(Batak::VowelSignEe),
VOWEL_SIGN_I => Ok(Batak::VowelSignI),
VOWEL_SIGN_KARO_I => Ok(Batak::VowelSignKaroI),
VOWEL_SIGN_O => Ok(Batak::VowelSignO),
VOWEL_SIGN_KARO_O => Ok(Batak::VowelSignKaroO),
VOWEL_SIGN_U => Ok(Batak::VowelSignU),
VOWEL_SIGN_U_FOR_SIMALUNGUN_SA => Ok(Batak::VowelSignUForSimalungunSa),
CONSONANT_SIGN_NG => Ok(Batak::ConsonantSignNg),
CONSONANT_SIGN_H => Ok(Batak::ConsonantSignH),
PANGOLAT => Ok(Batak::Pangolat),
PANONGONAN => Ok(Batak::Panongonan),
SYMBOL_BINDU_NA_METEK => Ok(Batak::SymbolBinduNaMetek),
SYMBOL_BINDU_PINARBORAS => Ok(Batak::SymbolBinduPinarboras),
SYMBOL_BINDU_JUDUL => Ok(Batak::SymbolBinduJudul),
_ => Err(()),
}
}
}
impl Into<u32> for Batak {
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 Batak {
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 Batak {
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 Batak {
pub fn new() -> Self {
Batak::LetterA
}
pub fn name(&self) -> &str {
match self {
Batak::LetterA => "batak letter a",
Batak::LetterSimalungunA => "batak letter simalungun a",
Batak::LetterHa => "batak letter ha",
Batak::LetterSimalungunHa => "batak letter simalungun ha",
Batak::LetterMandailingHa => "batak letter mandailing ha",
Batak::LetterBa => "batak letter ba",
Batak::LetterKaroBa => "batak letter karo ba",
Batak::LetterPa => "batak letter pa",
Batak::LetterSimalungunPa => "batak letter simalungun pa",
Batak::LetterNa => "batak letter na",
Batak::LetterMandailingNa => "batak letter mandailing na",
Batak::LetterWa => "batak letter wa",
Batak::LetterSimalungunWa => "batak letter simalungun wa",
Batak::LetterPakpakWa => "batak letter pakpak wa",
Batak::LetterGa => "batak letter ga",
Batak::LetterSimalungunGa => "batak letter simalungun ga",
Batak::LetterJa => "batak letter ja",
Batak::LetterDa => "batak letter da",
Batak::LetterRa => "batak letter ra",
Batak::LetterSimalungunRa => "batak letter simalungun ra",
Batak::LetterMa => "batak letter ma",
Batak::LetterSimalungunMa => "batak letter simalungun ma",
Batak::LetterSouthernTa => "batak letter southern ta",
Batak::LetterNorthernTa => "batak letter northern ta",
Batak::LetterSa => "batak letter sa",
Batak::LetterSimalungunSa => "batak letter simalungun sa",
Batak::LetterMandailingSa => "batak letter mandailing sa",
Batak::LetterYa => "batak letter ya",
Batak::LetterSimalungunYa => "batak letter simalungun ya",
Batak::LetterNga => "batak letter nga",
Batak::LetterLa => "batak letter la",
Batak::LetterSimalungunLa => "batak letter simalungun la",
Batak::LetterNya => "batak letter nya",
Batak::LetterCa => "batak letter ca",
Batak::LetterNda => "batak letter nda",
Batak::LetterMba => "batak letter mba",
Batak::LetterI => "batak letter i",
Batak::LetterU => "batak letter u",
Batak::SignTompi => "batak sign tompi",
Batak::VowelSignE => "batak vowel sign e",
Batak::VowelSignPakpakE => "batak vowel sign pakpak e",
Batak::VowelSignEe => "batak vowel sign ee",
Batak::VowelSignI => "batak vowel sign i",
Batak::VowelSignKaroI => "batak vowel sign karo i",
Batak::VowelSignO => "batak vowel sign o",
Batak::VowelSignKaroO => "batak vowel sign karo o",
Batak::VowelSignU => "batak vowel sign u",
Batak::VowelSignUForSimalungunSa => "batak vowel sign u for simalungun sa",
Batak::ConsonantSignNg => "batak consonant sign ng",
Batak::ConsonantSignH => "batak consonant sign h",
Batak::Pangolat => "batak pangolat",
Batak::Panongonan => "batak panongonan",
Batak::SymbolBinduNaMetek => "batak symbol bindu na metek",
Batak::SymbolBinduPinarboras => "batak symbol bindu pinarboras",
Batak::SymbolBinduJudul => "batak symbol bindu judul",
}
}
}