#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Osage {
CapitalLetterA,
CapitalLetterAi,
CapitalLetterAin,
CapitalLetterAh,
CapitalLetterBra,
CapitalLetterCha,
CapitalLetterEhcha,
CapitalLetterE,
CapitalLetterEin,
CapitalLetterHa,
CapitalLetterHya,
CapitalLetterI,
CapitalLetterKa,
CapitalLetterEhka,
CapitalLetterKya,
CapitalLetterLa,
CapitalLetterMa,
CapitalLetterNa,
CapitalLetterO,
CapitalLetterOin,
CapitalLetterPa,
CapitalLetterEhpa,
CapitalLetterSa,
CapitalLetterSha,
CapitalLetterTa,
CapitalLetterEhta,
CapitalLetterTsa,
CapitalLetterEhtsa,
CapitalLetterTsha,
CapitalLetterDha,
CapitalLetterU,
CapitalLetterWa,
CapitalLetterKha,
CapitalLetterGha,
CapitalLetterZa,
CapitalLetterZha,
SmallLetterA,
SmallLetterAi,
SmallLetterAin,
SmallLetterAh,
SmallLetterBra,
SmallLetterCha,
SmallLetterEhcha,
SmallLetterE,
SmallLetterEin,
SmallLetterHa,
SmallLetterHya,
SmallLetterI,
SmallLetterKa,
SmallLetterEhka,
SmallLetterKya,
SmallLetterLa,
SmallLetterMa,
SmallLetterNa,
SmallLetterO,
SmallLetterOin,
SmallLetterPa,
SmallLetterEhpa,
SmallLetterSa,
SmallLetterSha,
SmallLetterTa,
SmallLetterEhta,
SmallLetterTsa,
SmallLetterEhtsa,
SmallLetterTsha,
SmallLetterDha,
SmallLetterU,
SmallLetterWa,
SmallLetterKha,
SmallLetterGha,
SmallLetterZa,
SmallLetterZha,
}
impl Into<char> for Osage {
fn into(self) -> char {
match self {
Osage::CapitalLetterA => '𐒰',
Osage::CapitalLetterAi => '𐒱',
Osage::CapitalLetterAin => '𐒲',
Osage::CapitalLetterAh => '𐒳',
Osage::CapitalLetterBra => '𐒴',
Osage::CapitalLetterCha => '𐒵',
Osage::CapitalLetterEhcha => '𐒶',
Osage::CapitalLetterE => '𐒷',
Osage::CapitalLetterEin => '𐒸',
Osage::CapitalLetterHa => '𐒹',
Osage::CapitalLetterHya => '𐒺',
Osage::CapitalLetterI => '𐒻',
Osage::CapitalLetterKa => '𐒼',
Osage::CapitalLetterEhka => '𐒽',
Osage::CapitalLetterKya => '𐒾',
Osage::CapitalLetterLa => '𐒿',
Osage::CapitalLetterMa => '𐓀',
Osage::CapitalLetterNa => '𐓁',
Osage::CapitalLetterO => '𐓂',
Osage::CapitalLetterOin => '𐓃',
Osage::CapitalLetterPa => '𐓄',
Osage::CapitalLetterEhpa => '𐓅',
Osage::CapitalLetterSa => '𐓆',
Osage::CapitalLetterSha => '𐓇',
Osage::CapitalLetterTa => '𐓈',
Osage::CapitalLetterEhta => '𐓉',
Osage::CapitalLetterTsa => '𐓊',
Osage::CapitalLetterEhtsa => '𐓋',
Osage::CapitalLetterTsha => '𐓌',
Osage::CapitalLetterDha => '𐓍',
Osage::CapitalLetterU => '𐓎',
Osage::CapitalLetterWa => '𐓏',
Osage::CapitalLetterKha => '𐓐',
Osage::CapitalLetterGha => '𐓑',
Osage::CapitalLetterZa => '𐓒',
Osage::CapitalLetterZha => '𐓓',
Osage::SmallLetterA => '𐓘',
Osage::SmallLetterAi => '𐓙',
Osage::SmallLetterAin => '𐓚',
Osage::SmallLetterAh => '𐓛',
Osage::SmallLetterBra => '𐓜',
Osage::SmallLetterCha => '𐓝',
Osage::SmallLetterEhcha => '𐓞',
Osage::SmallLetterE => '𐓟',
Osage::SmallLetterEin => '𐓠',
Osage::SmallLetterHa => '𐓡',
Osage::SmallLetterHya => '𐓢',
Osage::SmallLetterI => '𐓣',
Osage::SmallLetterKa => '𐓤',
Osage::SmallLetterEhka => '𐓥',
Osage::SmallLetterKya => '𐓦',
Osage::SmallLetterLa => '𐓧',
Osage::SmallLetterMa => '𐓨',
Osage::SmallLetterNa => '𐓩',
Osage::SmallLetterO => '𐓪',
Osage::SmallLetterOin => '𐓫',
Osage::SmallLetterPa => '𐓬',
Osage::SmallLetterEhpa => '𐓭',
Osage::SmallLetterSa => '𐓮',
Osage::SmallLetterSha => '𐓯',
Osage::SmallLetterTa => '𐓰',
Osage::SmallLetterEhta => '𐓱',
Osage::SmallLetterTsa => '𐓲',
Osage::SmallLetterEhtsa => '𐓳',
Osage::SmallLetterTsha => '𐓴',
Osage::SmallLetterDha => '𐓵',
Osage::SmallLetterU => '𐓶',
Osage::SmallLetterWa => '𐓷',
Osage::SmallLetterKha => '𐓸',
Osage::SmallLetterGha => '𐓹',
Osage::SmallLetterZa => '𐓺',
Osage::SmallLetterZha => '𐓻',
}
}
}
impl std::convert::TryFrom<char> for Osage {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'𐒰' => Ok(Osage::CapitalLetterA),
'𐒱' => Ok(Osage::CapitalLetterAi),
'𐒲' => Ok(Osage::CapitalLetterAin),
'𐒳' => Ok(Osage::CapitalLetterAh),
'𐒴' => Ok(Osage::CapitalLetterBra),
'𐒵' => Ok(Osage::CapitalLetterCha),
'𐒶' => Ok(Osage::CapitalLetterEhcha),
'𐒷' => Ok(Osage::CapitalLetterE),
'𐒸' => Ok(Osage::CapitalLetterEin),
'𐒹' => Ok(Osage::CapitalLetterHa),
'𐒺' => Ok(Osage::CapitalLetterHya),
'𐒻' => Ok(Osage::CapitalLetterI),
'𐒼' => Ok(Osage::CapitalLetterKa),
'𐒽' => Ok(Osage::CapitalLetterEhka),
'𐒾' => Ok(Osage::CapitalLetterKya),
'𐒿' => Ok(Osage::CapitalLetterLa),
'𐓀' => Ok(Osage::CapitalLetterMa),
'𐓁' => Ok(Osage::CapitalLetterNa),
'𐓂' => Ok(Osage::CapitalLetterO),
'𐓃' => Ok(Osage::CapitalLetterOin),
'𐓄' => Ok(Osage::CapitalLetterPa),
'𐓅' => Ok(Osage::CapitalLetterEhpa),
'𐓆' => Ok(Osage::CapitalLetterSa),
'𐓇' => Ok(Osage::CapitalLetterSha),
'𐓈' => Ok(Osage::CapitalLetterTa),
'𐓉' => Ok(Osage::CapitalLetterEhta),
'𐓊' => Ok(Osage::CapitalLetterTsa),
'𐓋' => Ok(Osage::CapitalLetterEhtsa),
'𐓌' => Ok(Osage::CapitalLetterTsha),
'𐓍' => Ok(Osage::CapitalLetterDha),
'𐓎' => Ok(Osage::CapitalLetterU),
'𐓏' => Ok(Osage::CapitalLetterWa),
'𐓐' => Ok(Osage::CapitalLetterKha),
'𐓑' => Ok(Osage::CapitalLetterGha),
'𐓒' => Ok(Osage::CapitalLetterZa),
'𐓓' => Ok(Osage::CapitalLetterZha),
'𐓘' => Ok(Osage::SmallLetterA),
'𐓙' => Ok(Osage::SmallLetterAi),
'𐓚' => Ok(Osage::SmallLetterAin),
'𐓛' => Ok(Osage::SmallLetterAh),
'𐓜' => Ok(Osage::SmallLetterBra),
'𐓝' => Ok(Osage::SmallLetterCha),
'𐓞' => Ok(Osage::SmallLetterEhcha),
'𐓟' => Ok(Osage::SmallLetterE),
'𐓠' => Ok(Osage::SmallLetterEin),
'𐓡' => Ok(Osage::SmallLetterHa),
'𐓢' => Ok(Osage::SmallLetterHya),
'𐓣' => Ok(Osage::SmallLetterI),
'𐓤' => Ok(Osage::SmallLetterKa),
'𐓥' => Ok(Osage::SmallLetterEhka),
'𐓦' => Ok(Osage::SmallLetterKya),
'𐓧' => Ok(Osage::SmallLetterLa),
'𐓨' => Ok(Osage::SmallLetterMa),
'𐓩' => Ok(Osage::SmallLetterNa),
'𐓪' => Ok(Osage::SmallLetterO),
'𐓫' => Ok(Osage::SmallLetterOin),
'𐓬' => Ok(Osage::SmallLetterPa),
'𐓭' => Ok(Osage::SmallLetterEhpa),
'𐓮' => Ok(Osage::SmallLetterSa),
'𐓯' => Ok(Osage::SmallLetterSha),
'𐓰' => Ok(Osage::SmallLetterTa),
'𐓱' => Ok(Osage::SmallLetterEhta),
'𐓲' => Ok(Osage::SmallLetterTsa),
'𐓳' => Ok(Osage::SmallLetterEhtsa),
'𐓴' => Ok(Osage::SmallLetterTsha),
'𐓵' => Ok(Osage::SmallLetterDha),
'𐓶' => Ok(Osage::SmallLetterU),
'𐓷' => Ok(Osage::SmallLetterWa),
'𐓸' => Ok(Osage::SmallLetterKha),
'𐓹' => Ok(Osage::SmallLetterGha),
'𐓺' => Ok(Osage::SmallLetterZa),
'𐓻' => Ok(Osage::SmallLetterZha),
_ => Err(()),
}
}
}
impl Into<u32> for Osage {
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 Osage {
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 Osage {
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 Osage {
pub fn new() -> Self {
Osage::CapitalLetterA
}
pub fn name(&self) -> String {
let s = std::format!("Osage{:#?}", self);
string_morph::to_sentence_case(&s)
}
}