#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum NKo {
NkoDigitZero,
NkoDigitOne,
NkoDigitTwo,
NkoDigitThree,
NkoDigitFour,
NkoDigitFive,
NkoDigitSix,
NkoDigitSeven,
NkoDigitEight,
NkoDigitNine,
NkoLetterA,
NkoLetterEe,
NkoLetterI,
NkoLetterE,
NkoLetterU,
NkoLetterOo,
NkoLetterO,
NkoLetterDagbasinna,
NkoLetterN,
NkoLetterBa,
NkoLetterPa,
NkoLetterTa,
NkoLetterJa,
NkoLetterCha,
NkoLetterDa,
NkoLetterRa,
NkoLetterRra,
NkoLetterSa,
NkoLetterGba,
NkoLetterFa,
NkoLetterKa,
NkoLetterLa,
NkoLetterNaWoloso,
NkoLetterMa,
NkoLetterNya,
NkoLetterNa,
NkoLetterHa,
NkoLetterWa,
NkoLetterYa,
NkoLetterNyaWoloso,
NkoLetterJonaJa,
NkoLetterJonaCha,
NkoLetterJonaRa,
NkoCombiningShortHighTone,
NkoCombiningShortLowTone,
NkoCombiningShortRisingTone,
NkoCombiningLongDescendingTone,
NkoCombiningLongHighTone,
NkoCombiningLongLowTone,
NkoCombiningLongRisingTone,
NkoCombiningNasalizationMark,
NkoCombiningDoubleDotAbove,
NkoHighToneApostrophe,
NkoLowToneApostrophe,
NkoSymbolOoDennen,
NkoSymbolGbakurunen,
NkoComma,
NkoExclamationMark,
NkoLajanyalan,
NkoDantayalan,
NkoDoromeSign,
}
impl Into<char> for NKo {
fn into(self) -> char {
match self {
NKo::NkoDigitZero => '߀',
NKo::NkoDigitOne => '߁',
NKo::NkoDigitTwo => '߂',
NKo::NkoDigitThree => '߃',
NKo::NkoDigitFour => '߄',
NKo::NkoDigitFive => '߅',
NKo::NkoDigitSix => '߆',
NKo::NkoDigitSeven => '߇',
NKo::NkoDigitEight => '߈',
NKo::NkoDigitNine => '߉',
NKo::NkoLetterA => 'ߊ',
NKo::NkoLetterEe => 'ߋ',
NKo::NkoLetterI => 'ߌ',
NKo::NkoLetterE => 'ߍ',
NKo::NkoLetterU => 'ߎ',
NKo::NkoLetterOo => 'ߏ',
NKo::NkoLetterO => 'ߐ',
NKo::NkoLetterDagbasinna => 'ߑ',
NKo::NkoLetterN => 'ߒ',
NKo::NkoLetterBa => 'ߓ',
NKo::NkoLetterPa => 'ߔ',
NKo::NkoLetterTa => 'ߕ',
NKo::NkoLetterJa => 'ߖ',
NKo::NkoLetterCha => 'ߗ',
NKo::NkoLetterDa => 'ߘ',
NKo::NkoLetterRa => 'ߙ',
NKo::NkoLetterRra => 'ߚ',
NKo::NkoLetterSa => 'ߛ',
NKo::NkoLetterGba => 'ߜ',
NKo::NkoLetterFa => 'ߝ',
NKo::NkoLetterKa => 'ߞ',
NKo::NkoLetterLa => 'ߟ',
NKo::NkoLetterNaWoloso => 'ߠ',
NKo::NkoLetterMa => 'ߡ',
NKo::NkoLetterNya => 'ߢ',
NKo::NkoLetterNa => 'ߣ',
NKo::NkoLetterHa => 'ߤ',
NKo::NkoLetterWa => 'ߥ',
NKo::NkoLetterYa => 'ߦ',
NKo::NkoLetterNyaWoloso => 'ߧ',
NKo::NkoLetterJonaJa => 'ߨ',
NKo::NkoLetterJonaCha => 'ߩ',
NKo::NkoLetterJonaRa => 'ߪ',
NKo::NkoCombiningShortHighTone => '߫',
NKo::NkoCombiningShortLowTone => '߬',
NKo::NkoCombiningShortRisingTone => '߭',
NKo::NkoCombiningLongDescendingTone => '߮',
NKo::NkoCombiningLongHighTone => '߯',
NKo::NkoCombiningLongLowTone => '߰',
NKo::NkoCombiningLongRisingTone => '߱',
NKo::NkoCombiningNasalizationMark => '߲',
NKo::NkoCombiningDoubleDotAbove => '߳',
NKo::NkoHighToneApostrophe => 'ߴ',
NKo::NkoLowToneApostrophe => 'ߵ',
NKo::NkoSymbolOoDennen => '߶',
NKo::NkoSymbolGbakurunen => '߷',
NKo::NkoComma => '߸',
NKo::NkoExclamationMark => '߹',
NKo::NkoLajanyalan => 'ߺ',
NKo::NkoDantayalan => '߽',
NKo::NkoDoromeSign => '߾',
}
}
}
impl std::convert::TryFrom<char> for NKo {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'߀' => Ok(NKo::NkoDigitZero),
'߁' => Ok(NKo::NkoDigitOne),
'߂' => Ok(NKo::NkoDigitTwo),
'߃' => Ok(NKo::NkoDigitThree),
'߄' => Ok(NKo::NkoDigitFour),
'߅' => Ok(NKo::NkoDigitFive),
'߆' => Ok(NKo::NkoDigitSix),
'߇' => Ok(NKo::NkoDigitSeven),
'߈' => Ok(NKo::NkoDigitEight),
'߉' => Ok(NKo::NkoDigitNine),
'ߊ' => Ok(NKo::NkoLetterA),
'ߋ' => Ok(NKo::NkoLetterEe),
'ߌ' => Ok(NKo::NkoLetterI),
'ߍ' => Ok(NKo::NkoLetterE),
'ߎ' => Ok(NKo::NkoLetterU),
'ߏ' => Ok(NKo::NkoLetterOo),
'ߐ' => Ok(NKo::NkoLetterO),
'ߑ' => Ok(NKo::NkoLetterDagbasinna),
'ߒ' => Ok(NKo::NkoLetterN),
'ߓ' => Ok(NKo::NkoLetterBa),
'ߔ' => Ok(NKo::NkoLetterPa),
'ߕ' => Ok(NKo::NkoLetterTa),
'ߖ' => Ok(NKo::NkoLetterJa),
'ߗ' => Ok(NKo::NkoLetterCha),
'ߘ' => Ok(NKo::NkoLetterDa),
'ߙ' => Ok(NKo::NkoLetterRa),
'ߚ' => Ok(NKo::NkoLetterRra),
'ߛ' => Ok(NKo::NkoLetterSa),
'ߜ' => Ok(NKo::NkoLetterGba),
'ߝ' => Ok(NKo::NkoLetterFa),
'ߞ' => Ok(NKo::NkoLetterKa),
'ߟ' => Ok(NKo::NkoLetterLa),
'ߠ' => Ok(NKo::NkoLetterNaWoloso),
'ߡ' => Ok(NKo::NkoLetterMa),
'ߢ' => Ok(NKo::NkoLetterNya),
'ߣ' => Ok(NKo::NkoLetterNa),
'ߤ' => Ok(NKo::NkoLetterHa),
'ߥ' => Ok(NKo::NkoLetterWa),
'ߦ' => Ok(NKo::NkoLetterYa),
'ߧ' => Ok(NKo::NkoLetterNyaWoloso),
'ߨ' => Ok(NKo::NkoLetterJonaJa),
'ߩ' => Ok(NKo::NkoLetterJonaCha),
'ߪ' => Ok(NKo::NkoLetterJonaRa),
'߫' => Ok(NKo::NkoCombiningShortHighTone),
'߬' => Ok(NKo::NkoCombiningShortLowTone),
'߭' => Ok(NKo::NkoCombiningShortRisingTone),
'߮' => Ok(NKo::NkoCombiningLongDescendingTone),
'߯' => Ok(NKo::NkoCombiningLongHighTone),
'߰' => Ok(NKo::NkoCombiningLongLowTone),
'߱' => Ok(NKo::NkoCombiningLongRisingTone),
'߲' => Ok(NKo::NkoCombiningNasalizationMark),
'߳' => Ok(NKo::NkoCombiningDoubleDotAbove),
'ߴ' => Ok(NKo::NkoHighToneApostrophe),
'ߵ' => Ok(NKo::NkoLowToneApostrophe),
'߶' => Ok(NKo::NkoSymbolOoDennen),
'߷' => Ok(NKo::NkoSymbolGbakurunen),
'߸' => Ok(NKo::NkoComma),
'߹' => Ok(NKo::NkoExclamationMark),
'ߺ' => Ok(NKo::NkoLajanyalan),
'߽' => Ok(NKo::NkoDantayalan),
'߾' => Ok(NKo::NkoDoromeSign),
_ => Err(()),
}
}
}
impl Into<u32> for NKo {
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 NKo {
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 NKo {
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 NKo {
pub fn new() -> Self {
NKo::NkoDigitZero
}
pub fn name(&self) -> String {
let s = std::format!("NKo{:#?}", self);
string_morph::to_sentence_case(&s)
}
}