#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Runic {
LetterFehuFeohFeF,
LetterV,
LetterUruzUrU,
LetterYr,
LetterY,
LetterW,
LetterThurisazThursThorn,
LetterEth,
LetterAnsuzA,
LetterOsO,
LetterAcA,
LetterAesc,
LetterLongDashBranchDashOssO,
LetterShortDashTwigDashOssO,
LetterO,
LetterOe,
LetterOn,
LetterRaidoRadReidR,
LetterKauna,
LetterCen,
LetterKaunK,
LetterG,
LetterEng,
LetterGeboGyfuG,
LetterGar,
LetterWunjoWynnW,
LetterHaglazH,
LetterHaeglH,
LetterLongDashBranchDashHagallH,
LetterShortDashTwigDashHagallH,
LetterNaudizNydNaudN,
LetterShortDashTwigDashNaudN,
LetterDottedDashN,
LetterIsazIsIssI,
LetterE,
LetterJeranJ,
LetterGer,
LetterLongDashBranchDashArAe,
LetterShortDashTwigDashArA,
LetterIwazEoh,
LetterPerthoPeorthP,
LetterAlgizEolhx,
LetterSowiloS,
LetterSigelLongDashBranchDashSolS,
LetterShortDashTwigDashSolS,
LetterC,
LetterZ,
LetterTiwazTirTyrT,
LetterShortDashTwigDashTyrT,
LetterD,
LetterBerkananBeorcBjarkanB,
LetterShortDashTwigDashBjarkanB,
LetterDottedDashP,
LetterOpenDashP,
LetterEhwazEhE,
LetterMannazManM,
LetterLongDashBranchDashMadrM,
LetterShortDashTwigDashMadrM,
LetterLaukazLaguLogrL,
LetterDottedDashL,
LetterIngwaz,
LetterIng,
LetterDagazDaegD,
LetterOthalanEthelO,
LetterEar,
LetterIor,
LetterCweorth,
LetterCalc,
LetterCealc,
LetterStan,
LetterLongDashBranchDashYr,
LetterShortDashTwigDashYr,
LetterIcelandicDashYr,
LetterQ,
LetterX,
SinglePunctuation,
MultiplePunctuation,
CrossPunctuation,
ArlaugSymbol,
TvimadurSymbol,
BelgthorSymbol,
LetterK,
LetterSh,
LetterOo,
LetterFranksCasketOs,
LetterFranksCasketIs,
LetterFranksCasketEh,
LetterFranksCasketAc,
LetterFranksCasketAesc,
}
impl Into<char> for Runic {
fn into(self) -> char {
match self {
Runic::LetterFehuFeohFeF => 'ᚠ',
Runic::LetterV => 'ᚡ',
Runic::LetterUruzUrU => 'ᚢ',
Runic::LetterYr => 'ᚣ',
Runic::LetterY => 'ᚤ',
Runic::LetterW => 'ᚥ',
Runic::LetterThurisazThursThorn => 'ᚦ',
Runic::LetterEth => 'ᚧ',
Runic::LetterAnsuzA => 'ᚨ',
Runic::LetterOsO => 'ᚩ',
Runic::LetterAcA => 'ᚪ',
Runic::LetterAesc => 'ᚫ',
Runic::LetterLongDashBranchDashOssO => 'ᚬ',
Runic::LetterShortDashTwigDashOssO => 'ᚭ',
Runic::LetterO => 'ᚮ',
Runic::LetterOe => 'ᚯ',
Runic::LetterOn => 'ᚰ',
Runic::LetterRaidoRadReidR => 'ᚱ',
Runic::LetterKauna => 'ᚲ',
Runic::LetterCen => 'ᚳ',
Runic::LetterKaunK => 'ᚴ',
Runic::LetterG => 'ᚵ',
Runic::LetterEng => 'ᚶ',
Runic::LetterGeboGyfuG => 'ᚷ',
Runic::LetterGar => 'ᚸ',
Runic::LetterWunjoWynnW => 'ᚹ',
Runic::LetterHaglazH => 'ᚺ',
Runic::LetterHaeglH => 'ᚻ',
Runic::LetterLongDashBranchDashHagallH => 'ᚼ',
Runic::LetterShortDashTwigDashHagallH => 'ᚽ',
Runic::LetterNaudizNydNaudN => 'ᚾ',
Runic::LetterShortDashTwigDashNaudN => 'ᚿ',
Runic::LetterDottedDashN => 'ᛀ',
Runic::LetterIsazIsIssI => 'ᛁ',
Runic::LetterE => 'ᛂ',
Runic::LetterJeranJ => 'ᛃ',
Runic::LetterGer => 'ᛄ',
Runic::LetterLongDashBranchDashArAe => 'ᛅ',
Runic::LetterShortDashTwigDashArA => 'ᛆ',
Runic::LetterIwazEoh => 'ᛇ',
Runic::LetterPerthoPeorthP => 'ᛈ',
Runic::LetterAlgizEolhx => 'ᛉ',
Runic::LetterSowiloS => 'ᛊ',
Runic::LetterSigelLongDashBranchDashSolS => 'ᛋ',
Runic::LetterShortDashTwigDashSolS => 'ᛌ',
Runic::LetterC => 'ᛍ',
Runic::LetterZ => 'ᛎ',
Runic::LetterTiwazTirTyrT => 'ᛏ',
Runic::LetterShortDashTwigDashTyrT => 'ᛐ',
Runic::LetterD => 'ᛑ',
Runic::LetterBerkananBeorcBjarkanB => 'ᛒ',
Runic::LetterShortDashTwigDashBjarkanB => 'ᛓ',
Runic::LetterDottedDashP => 'ᛔ',
Runic::LetterOpenDashP => 'ᛕ',
Runic::LetterEhwazEhE => 'ᛖ',
Runic::LetterMannazManM => 'ᛗ',
Runic::LetterLongDashBranchDashMadrM => 'ᛘ',
Runic::LetterShortDashTwigDashMadrM => 'ᛙ',
Runic::LetterLaukazLaguLogrL => 'ᛚ',
Runic::LetterDottedDashL => 'ᛛ',
Runic::LetterIngwaz => 'ᛜ',
Runic::LetterIng => 'ᛝ',
Runic::LetterDagazDaegD => 'ᛞ',
Runic::LetterOthalanEthelO => 'ᛟ',
Runic::LetterEar => 'ᛠ',
Runic::LetterIor => 'ᛡ',
Runic::LetterCweorth => 'ᛢ',
Runic::LetterCalc => 'ᛣ',
Runic::LetterCealc => 'ᛤ',
Runic::LetterStan => 'ᛥ',
Runic::LetterLongDashBranchDashYr => 'ᛦ',
Runic::LetterShortDashTwigDashYr => 'ᛧ',
Runic::LetterIcelandicDashYr => 'ᛨ',
Runic::LetterQ => 'ᛩ',
Runic::LetterX => 'ᛪ',
Runic::SinglePunctuation => '᛫',
Runic::MultiplePunctuation => '᛬',
Runic::CrossPunctuation => '᛭',
Runic::ArlaugSymbol => 'ᛮ',
Runic::TvimadurSymbol => 'ᛯ',
Runic::BelgthorSymbol => 'ᛰ',
Runic::LetterK => 'ᛱ',
Runic::LetterSh => 'ᛲ',
Runic::LetterOo => 'ᛳ',
Runic::LetterFranksCasketOs => 'ᛴ',
Runic::LetterFranksCasketIs => 'ᛵ',
Runic::LetterFranksCasketEh => 'ᛶ',
Runic::LetterFranksCasketAc => 'ᛷ',
Runic::LetterFranksCasketAesc => 'ᛸ',
}
}
}
impl std::convert::TryFrom<char> for Runic {
type Error = ();
fn try_from(c: char) -> Result<Self, Self::Error> {
match c {
'ᚠ' => Ok(Runic::LetterFehuFeohFeF),
'ᚡ' => Ok(Runic::LetterV),
'ᚢ' => Ok(Runic::LetterUruzUrU),
'ᚣ' => Ok(Runic::LetterYr),
'ᚤ' => Ok(Runic::LetterY),
'ᚥ' => Ok(Runic::LetterW),
'ᚦ' => Ok(Runic::LetterThurisazThursThorn),
'ᚧ' => Ok(Runic::LetterEth),
'ᚨ' => Ok(Runic::LetterAnsuzA),
'ᚩ' => Ok(Runic::LetterOsO),
'ᚪ' => Ok(Runic::LetterAcA),
'ᚫ' => Ok(Runic::LetterAesc),
'ᚬ' => Ok(Runic::LetterLongDashBranchDashOssO),
'ᚭ' => Ok(Runic::LetterShortDashTwigDashOssO),
'ᚮ' => Ok(Runic::LetterO),
'ᚯ' => Ok(Runic::LetterOe),
'ᚰ' => Ok(Runic::LetterOn),
'ᚱ' => Ok(Runic::LetterRaidoRadReidR),
'ᚲ' => Ok(Runic::LetterKauna),
'ᚳ' => Ok(Runic::LetterCen),
'ᚴ' => Ok(Runic::LetterKaunK),
'ᚵ' => Ok(Runic::LetterG),
'ᚶ' => Ok(Runic::LetterEng),
'ᚷ' => Ok(Runic::LetterGeboGyfuG),
'ᚸ' => Ok(Runic::LetterGar),
'ᚹ' => Ok(Runic::LetterWunjoWynnW),
'ᚺ' => Ok(Runic::LetterHaglazH),
'ᚻ' => Ok(Runic::LetterHaeglH),
'ᚼ' => Ok(Runic::LetterLongDashBranchDashHagallH),
'ᚽ' => Ok(Runic::LetterShortDashTwigDashHagallH),
'ᚾ' => Ok(Runic::LetterNaudizNydNaudN),
'ᚿ' => Ok(Runic::LetterShortDashTwigDashNaudN),
'ᛀ' => Ok(Runic::LetterDottedDashN),
'ᛁ' => Ok(Runic::LetterIsazIsIssI),
'ᛂ' => Ok(Runic::LetterE),
'ᛃ' => Ok(Runic::LetterJeranJ),
'ᛄ' => Ok(Runic::LetterGer),
'ᛅ' => Ok(Runic::LetterLongDashBranchDashArAe),
'ᛆ' => Ok(Runic::LetterShortDashTwigDashArA),
'ᛇ' => Ok(Runic::LetterIwazEoh),
'ᛈ' => Ok(Runic::LetterPerthoPeorthP),
'ᛉ' => Ok(Runic::LetterAlgizEolhx),
'ᛊ' => Ok(Runic::LetterSowiloS),
'ᛋ' => Ok(Runic::LetterSigelLongDashBranchDashSolS),
'ᛌ' => Ok(Runic::LetterShortDashTwigDashSolS),
'ᛍ' => Ok(Runic::LetterC),
'ᛎ' => Ok(Runic::LetterZ),
'ᛏ' => Ok(Runic::LetterTiwazTirTyrT),
'ᛐ' => Ok(Runic::LetterShortDashTwigDashTyrT),
'ᛑ' => Ok(Runic::LetterD),
'ᛒ' => Ok(Runic::LetterBerkananBeorcBjarkanB),
'ᛓ' => Ok(Runic::LetterShortDashTwigDashBjarkanB),
'ᛔ' => Ok(Runic::LetterDottedDashP),
'ᛕ' => Ok(Runic::LetterOpenDashP),
'ᛖ' => Ok(Runic::LetterEhwazEhE),
'ᛗ' => Ok(Runic::LetterMannazManM),
'ᛘ' => Ok(Runic::LetterLongDashBranchDashMadrM),
'ᛙ' => Ok(Runic::LetterShortDashTwigDashMadrM),
'ᛚ' => Ok(Runic::LetterLaukazLaguLogrL),
'ᛛ' => Ok(Runic::LetterDottedDashL),
'ᛜ' => Ok(Runic::LetterIngwaz),
'ᛝ' => Ok(Runic::LetterIng),
'ᛞ' => Ok(Runic::LetterDagazDaegD),
'ᛟ' => Ok(Runic::LetterOthalanEthelO),
'ᛠ' => Ok(Runic::LetterEar),
'ᛡ' => Ok(Runic::LetterIor),
'ᛢ' => Ok(Runic::LetterCweorth),
'ᛣ' => Ok(Runic::LetterCalc),
'ᛤ' => Ok(Runic::LetterCealc),
'ᛥ' => Ok(Runic::LetterStan),
'ᛦ' => Ok(Runic::LetterLongDashBranchDashYr),
'ᛧ' => Ok(Runic::LetterShortDashTwigDashYr),
'ᛨ' => Ok(Runic::LetterIcelandicDashYr),
'ᛩ' => Ok(Runic::LetterQ),
'ᛪ' => Ok(Runic::LetterX),
'᛫' => Ok(Runic::SinglePunctuation),
'᛬' => Ok(Runic::MultiplePunctuation),
'᛭' => Ok(Runic::CrossPunctuation),
'ᛮ' => Ok(Runic::ArlaugSymbol),
'ᛯ' => Ok(Runic::TvimadurSymbol),
'ᛰ' => Ok(Runic::BelgthorSymbol),
'ᛱ' => Ok(Runic::LetterK),
'ᛲ' => Ok(Runic::LetterSh),
'ᛳ' => Ok(Runic::LetterOo),
'ᛴ' => Ok(Runic::LetterFranksCasketOs),
'ᛵ' => Ok(Runic::LetterFranksCasketIs),
'ᛶ' => Ok(Runic::LetterFranksCasketEh),
'ᛷ' => Ok(Runic::LetterFranksCasketAc),
'ᛸ' => Ok(Runic::LetterFranksCasketAesc),
_ => Err(()),
}
}
}
impl Into<u32> for Runic {
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 Runic {
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 Runic {
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 Runic {
pub fn new() -> Self {
Runic::LetterFehuFeohFeF
}
pub fn name(&self) -> String {
let s = std::format!("Runic{:#?}", self);
string_morph::to_sentence_case(&s)
}
}