#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Bamum {
LetterA,
LetterKa,
LetterU,
LetterKu,
LetterEe,
LetterRee,
LetterTae,
LetterO,
LetterNyi,
LetterI,
LetterLa,
LetterPa,
LetterRii,
LetterRiee,
LetterLeeee,
LetterMeeee,
LetterTaa,
LetterNdaa,
LetterNjaem,
LetterM,
LetterSuu,
LetterMu,
LetterShii,
LetterSi,
LetterSheux,
LetterSeux,
LetterKyee,
LetterKet,
LetterNuae,
LetterNu,
LetterNjuae,
LetterYoq,
LetterShu,
LetterYuq,
LetterYa,
LetterNsha,
LetterKeux,
LetterPeux,
LetterNjee,
LetterNtee,
LetterPue,
LetterWue,
LetterPee,
LetterFee,
LetterRu,
LetterLu,
LetterMi,
LetterNi,
LetterReux,
LetterRae,
LetterKen,
LetterNgkwaen,
LetterNgga,
LetterNga,
LetterSho,
LetterPuae,
LetterFu,
LetterFom,
LetterWa,
LetterNa,
LetterLi,
LetterPi,
LetterLoq,
LetterKo,
LetterMben,
LetterRen,
LetterMen,
LetterMa,
LetterTi,
LetterKi,
LetterMo,
LetterMbaa,
LetterTet,
LetterKpa,
LetterTen,
LetterNtuu,
LetterSamba,
LetterFaamae,
LetterKovuu,
LetterKoghom,
CombiningMarkKoqndon,
CombiningMarkTukwentis,
Njaemli,
FullStop,
Colon,
Comma,
Semicolon,
QuestionMark,
}
impl Into<char> for Bamum {
fn into(self) -> char {
match self {
Bamum::LetterA => 'ꚠ',
Bamum::LetterKa => 'ꚡ',
Bamum::LetterU => 'ꚢ',
Bamum::LetterKu => 'ꚣ',
Bamum::LetterEe => 'ꚤ',
Bamum::LetterRee => 'ꚥ',
Bamum::LetterTae => 'ꚦ',
Bamum::LetterO => 'ꚧ',
Bamum::LetterNyi => 'ꚨ',
Bamum::LetterI => 'ꚩ',
Bamum::LetterLa => 'ꚪ',
Bamum::LetterPa => 'ꚫ',
Bamum::LetterRii => 'ꚬ',
Bamum::LetterRiee => 'ꚭ',
Bamum::LetterLeeee => 'ꚮ',
Bamum::LetterMeeee => 'ꚯ',
Bamum::LetterTaa => 'ꚰ',
Bamum::LetterNdaa => 'ꚱ',
Bamum::LetterNjaem => 'ꚲ',
Bamum::LetterM => 'ꚳ',
Bamum::LetterSuu => 'ꚴ',
Bamum::LetterMu => 'ꚵ',
Bamum::LetterShii => 'ꚶ',
Bamum::LetterSi => 'ꚷ',
Bamum::LetterSheux => 'ꚸ',
Bamum::LetterSeux => 'ꚹ',
Bamum::LetterKyee => 'ꚺ',
Bamum::LetterKet => 'ꚻ',
Bamum::LetterNuae => 'ꚼ',
Bamum::LetterNu => 'ꚽ',
Bamum::LetterNjuae => 'ꚾ',
Bamum::LetterYoq => 'ꚿ',
Bamum::LetterShu => 'ꛀ',
Bamum::LetterYuq => 'ꛁ',
Bamum::LetterYa => 'ꛂ',
Bamum::LetterNsha => 'ꛃ',
Bamum::LetterKeux => 'ꛄ',
Bamum::LetterPeux => 'ꛅ',
Bamum::LetterNjee => 'ꛆ',
Bamum::LetterNtee => 'ꛇ',
Bamum::LetterPue => 'ꛈ',
Bamum::LetterWue => 'ꛉ',
Bamum::LetterPee => 'ꛊ',
Bamum::LetterFee => 'ꛋ',
Bamum::LetterRu => 'ꛌ',
Bamum::LetterLu => 'ꛍ',
Bamum::LetterMi => 'ꛎ',
Bamum::LetterNi => 'ꛏ',
Bamum::LetterReux => 'ꛐ',
Bamum::LetterRae => 'ꛑ',
Bamum::LetterKen => 'ꛒ',
Bamum::LetterNgkwaen => 'ꛓ',
Bamum::LetterNgga => 'ꛔ',
Bamum::LetterNga => 'ꛕ',
Bamum::LetterSho => 'ꛖ',
Bamum::LetterPuae => 'ꛗ',
Bamum::LetterFu => 'ꛘ',
Bamum::LetterFom => 'ꛙ',
Bamum::LetterWa => 'ꛚ',
Bamum::LetterNa => 'ꛛ',
Bamum::LetterLi => 'ꛜ',
Bamum::LetterPi => 'ꛝ',
Bamum::LetterLoq => 'ꛞ',
Bamum::LetterKo => 'ꛟ',
Bamum::LetterMben => 'ꛠ',
Bamum::LetterRen => 'ꛡ',
Bamum::LetterMen => 'ꛢ',
Bamum::LetterMa => 'ꛣ',
Bamum::LetterTi => 'ꛤ',
Bamum::LetterKi => 'ꛥ',
Bamum::LetterMo => 'ꛦ',
Bamum::LetterMbaa => 'ꛧ',
Bamum::LetterTet => 'ꛨ',
Bamum::LetterKpa => 'ꛩ',
Bamum::LetterTen => 'ꛪ',
Bamum::LetterNtuu => 'ꛫ',
Bamum::LetterSamba => 'ꛬ',
Bamum::LetterFaamae => 'ꛭ',
Bamum::LetterKovuu => 'ꛮ',
Bamum::LetterKoghom => 'ꛯ',
Bamum::CombiningMarkKoqndon => '꛰',
Bamum::CombiningMarkTukwentis => '꛱',
Bamum::Njaemli => '꛲',
Bamum::FullStop => '꛳',
Bamum::Colon => '꛴',
Bamum::Comma => '꛵',
Bamum::Semicolon => '꛶',
Bamum::QuestionMark => '꛷',
}
}
}
impl std::convert::TryFrom<char> for Bamum {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'ꚠ' => Ok(Bamum::LetterA),
'ꚡ' => Ok(Bamum::LetterKa),
'ꚢ' => Ok(Bamum::LetterU),
'ꚣ' => Ok(Bamum::LetterKu),
'ꚤ' => Ok(Bamum::LetterEe),
'ꚥ' => Ok(Bamum::LetterRee),
'ꚦ' => Ok(Bamum::LetterTae),
'ꚧ' => Ok(Bamum::LetterO),
'ꚨ' => Ok(Bamum::LetterNyi),
'ꚩ' => Ok(Bamum::LetterI),
'ꚪ' => Ok(Bamum::LetterLa),
'ꚫ' => Ok(Bamum::LetterPa),
'ꚬ' => Ok(Bamum::LetterRii),
'ꚭ' => Ok(Bamum::LetterRiee),
'ꚮ' => Ok(Bamum::LetterLeeee),
'ꚯ' => Ok(Bamum::LetterMeeee),
'ꚰ' => Ok(Bamum::LetterTaa),
'ꚱ' => Ok(Bamum::LetterNdaa),
'ꚲ' => Ok(Bamum::LetterNjaem),
'ꚳ' => Ok(Bamum::LetterM),
'ꚴ' => Ok(Bamum::LetterSuu),
'ꚵ' => Ok(Bamum::LetterMu),
'ꚶ' => Ok(Bamum::LetterShii),
'ꚷ' => Ok(Bamum::LetterSi),
'ꚸ' => Ok(Bamum::LetterSheux),
'ꚹ' => Ok(Bamum::LetterSeux),
'ꚺ' => Ok(Bamum::LetterKyee),
'ꚻ' => Ok(Bamum::LetterKet),
'ꚼ' => Ok(Bamum::LetterNuae),
'ꚽ' => Ok(Bamum::LetterNu),
'ꚾ' => Ok(Bamum::LetterNjuae),
'ꚿ' => Ok(Bamum::LetterYoq),
'ꛀ' => Ok(Bamum::LetterShu),
'ꛁ' => Ok(Bamum::LetterYuq),
'ꛂ' => Ok(Bamum::LetterYa),
'ꛃ' => Ok(Bamum::LetterNsha),
'ꛄ' => Ok(Bamum::LetterKeux),
'ꛅ' => Ok(Bamum::LetterPeux),
'ꛆ' => Ok(Bamum::LetterNjee),
'ꛇ' => Ok(Bamum::LetterNtee),
'ꛈ' => Ok(Bamum::LetterPue),
'ꛉ' => Ok(Bamum::LetterWue),
'ꛊ' => Ok(Bamum::LetterPee),
'ꛋ' => Ok(Bamum::LetterFee),
'ꛌ' => Ok(Bamum::LetterRu),
'ꛍ' => Ok(Bamum::LetterLu),
'ꛎ' => Ok(Bamum::LetterMi),
'ꛏ' => Ok(Bamum::LetterNi),
'ꛐ' => Ok(Bamum::LetterReux),
'ꛑ' => Ok(Bamum::LetterRae),
'ꛒ' => Ok(Bamum::LetterKen),
'ꛓ' => Ok(Bamum::LetterNgkwaen),
'ꛔ' => Ok(Bamum::LetterNgga),
'ꛕ' => Ok(Bamum::LetterNga),
'ꛖ' => Ok(Bamum::LetterSho),
'ꛗ' => Ok(Bamum::LetterPuae),
'ꛘ' => Ok(Bamum::LetterFu),
'ꛙ' => Ok(Bamum::LetterFom),
'ꛚ' => Ok(Bamum::LetterWa),
'ꛛ' => Ok(Bamum::LetterNa),
'ꛜ' => Ok(Bamum::LetterLi),
'ꛝ' => Ok(Bamum::LetterPi),
'ꛞ' => Ok(Bamum::LetterLoq),
'ꛟ' => Ok(Bamum::LetterKo),
'ꛠ' => Ok(Bamum::LetterMben),
'ꛡ' => Ok(Bamum::LetterRen),
'ꛢ' => Ok(Bamum::LetterMen),
'ꛣ' => Ok(Bamum::LetterMa),
'ꛤ' => Ok(Bamum::LetterTi),
'ꛥ' => Ok(Bamum::LetterKi),
'ꛦ' => Ok(Bamum::LetterMo),
'ꛧ' => Ok(Bamum::LetterMbaa),
'ꛨ' => Ok(Bamum::LetterTet),
'ꛩ' => Ok(Bamum::LetterKpa),
'ꛪ' => Ok(Bamum::LetterTen),
'ꛫ' => Ok(Bamum::LetterNtuu),
'ꛬ' => Ok(Bamum::LetterSamba),
'ꛭ' => Ok(Bamum::LetterFaamae),
'ꛮ' => Ok(Bamum::LetterKovuu),
'ꛯ' => Ok(Bamum::LetterKoghom),
'꛰' => Ok(Bamum::CombiningMarkKoqndon),
'꛱' => Ok(Bamum::CombiningMarkTukwentis),
'꛲' => Ok(Bamum::Njaemli),
'꛳' => Ok(Bamum::FullStop),
'꛴' => Ok(Bamum::Colon),
'꛵' => Ok(Bamum::Comma),
'꛶' => Ok(Bamum::Semicolon),
'꛷' => Ok(Bamum::QuestionMark),
_ => Err(()),
}
}
}
impl Into<u32> for Bamum {
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 Bamum {
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 Bamum {
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 Bamum {
pub fn new() -> Self {
Bamum::LetterA
}
pub fn name(&self) -> String {
let s = std::format!("Bamum{:#?}", self);
string_morph::to_sentence_case(&s)
}
}