1
2#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
4pub enum Runic {
5 LetterFehuFeohFeF,
7 LetterV,
9 LetterUruzUrU,
11 LetterYr,
13 LetterY,
15 LetterW,
17 LetterThurisazThursThorn,
19 LetterEth,
21 LetterAnsuzA,
23 LetterOsO,
25 LetterAcA,
27 LetterAesc,
29 LetterLongDashBranchDashOssO,
31 LetterShortDashTwigDashOssO,
33 LetterO,
35 LetterOe,
37 LetterOn,
39 LetterRaidoRadReidR,
41 LetterKauna,
43 LetterCen,
45 LetterKaunK,
47 LetterG,
49 LetterEng,
51 LetterGeboGyfuG,
53 LetterGar,
55 LetterWunjoWynnW,
57 LetterHaglazH,
59 LetterHaeglH,
61 LetterLongDashBranchDashHagallH,
63 LetterShortDashTwigDashHagallH,
65 LetterNaudizNydNaudN,
67 LetterShortDashTwigDashNaudN,
69 LetterDottedDashN,
71 LetterIsazIsIssI,
73 LetterE,
75 LetterJeranJ,
77 LetterGer,
79 LetterLongDashBranchDashArAe,
81 LetterShortDashTwigDashArA,
83 LetterIwazEoh,
85 LetterPerthoPeorthP,
87 LetterAlgizEolhx,
89 LetterSowiloS,
91 LetterSigelLongDashBranchDashSolS,
93 LetterShortDashTwigDashSolS,
95 LetterC,
97 LetterZ,
99 LetterTiwazTirTyrT,
101 LetterShortDashTwigDashTyrT,
103 LetterD,
105 LetterBerkananBeorcBjarkanB,
107 LetterShortDashTwigDashBjarkanB,
109 LetterDottedDashP,
111 LetterOpenDashP,
113 LetterEhwazEhE,
115 LetterMannazManM,
117 LetterLongDashBranchDashMadrM,
119 LetterShortDashTwigDashMadrM,
121 LetterLaukazLaguLogrL,
123 LetterDottedDashL,
125 LetterIngwaz,
127 LetterIng,
129 LetterDagazDaegD,
131 LetterOthalanEthelO,
133 LetterEar,
135 LetterIor,
137 LetterCweorth,
139 LetterCalc,
141 LetterCealc,
143 LetterStan,
145 LetterLongDashBranchDashYr,
147 LetterShortDashTwigDashYr,
149 LetterIcelandicDashYr,
151 LetterQ,
153 LetterX,
155 SinglePunctuation,
157 MultiplePunctuation,
159 CrossPunctuation,
161 ArlaugSymbol,
163 TvimadurSymbol,
165 BelgthorSymbol,
167 LetterK,
169 LetterSh,
171 LetterOo,
173 LetterFranksCasketOs,
175 LetterFranksCasketIs,
177 LetterFranksCasketEh,
179 LetterFranksCasketAc,
181 LetterFranksCasketAesc,
183}
184
185impl Into<char> for Runic {
186 fn into(self) -> char {
187 match self {
188 Runic::LetterFehuFeohFeF => 'ᚠ',
189 Runic::LetterV => 'ᚡ',
190 Runic::LetterUruzUrU => 'ᚢ',
191 Runic::LetterYr => 'ᚣ',
192 Runic::LetterY => 'ᚤ',
193 Runic::LetterW => 'ᚥ',
194 Runic::LetterThurisazThursThorn => 'ᚦ',
195 Runic::LetterEth => 'ᚧ',
196 Runic::LetterAnsuzA => 'ᚨ',
197 Runic::LetterOsO => 'ᚩ',
198 Runic::LetterAcA => 'ᚪ',
199 Runic::LetterAesc => 'ᚫ',
200 Runic::LetterLongDashBranchDashOssO => 'ᚬ',
201 Runic::LetterShortDashTwigDashOssO => 'ᚭ',
202 Runic::LetterO => 'ᚮ',
203 Runic::LetterOe => 'ᚯ',
204 Runic::LetterOn => 'ᚰ',
205 Runic::LetterRaidoRadReidR => 'ᚱ',
206 Runic::LetterKauna => 'ᚲ',
207 Runic::LetterCen => 'ᚳ',
208 Runic::LetterKaunK => 'ᚴ',
209 Runic::LetterG => 'ᚵ',
210 Runic::LetterEng => 'ᚶ',
211 Runic::LetterGeboGyfuG => 'ᚷ',
212 Runic::LetterGar => 'ᚸ',
213 Runic::LetterWunjoWynnW => 'ᚹ',
214 Runic::LetterHaglazH => 'ᚺ',
215 Runic::LetterHaeglH => 'ᚻ',
216 Runic::LetterLongDashBranchDashHagallH => 'ᚼ',
217 Runic::LetterShortDashTwigDashHagallH => 'ᚽ',
218 Runic::LetterNaudizNydNaudN => 'ᚾ',
219 Runic::LetterShortDashTwigDashNaudN => 'ᚿ',
220 Runic::LetterDottedDashN => 'ᛀ',
221 Runic::LetterIsazIsIssI => 'ᛁ',
222 Runic::LetterE => 'ᛂ',
223 Runic::LetterJeranJ => 'ᛃ',
224 Runic::LetterGer => 'ᛄ',
225 Runic::LetterLongDashBranchDashArAe => 'ᛅ',
226 Runic::LetterShortDashTwigDashArA => 'ᛆ',
227 Runic::LetterIwazEoh => 'ᛇ',
228 Runic::LetterPerthoPeorthP => 'ᛈ',
229 Runic::LetterAlgizEolhx => 'ᛉ',
230 Runic::LetterSowiloS => 'ᛊ',
231 Runic::LetterSigelLongDashBranchDashSolS => 'ᛋ',
232 Runic::LetterShortDashTwigDashSolS => 'ᛌ',
233 Runic::LetterC => 'ᛍ',
234 Runic::LetterZ => 'ᛎ',
235 Runic::LetterTiwazTirTyrT => 'ᛏ',
236 Runic::LetterShortDashTwigDashTyrT => 'ᛐ',
237 Runic::LetterD => 'ᛑ',
238 Runic::LetterBerkananBeorcBjarkanB => 'ᛒ',
239 Runic::LetterShortDashTwigDashBjarkanB => 'ᛓ',
240 Runic::LetterDottedDashP => 'ᛔ',
241 Runic::LetterOpenDashP => 'ᛕ',
242 Runic::LetterEhwazEhE => 'ᛖ',
243 Runic::LetterMannazManM => 'ᛗ',
244 Runic::LetterLongDashBranchDashMadrM => 'ᛘ',
245 Runic::LetterShortDashTwigDashMadrM => 'ᛙ',
246 Runic::LetterLaukazLaguLogrL => 'ᛚ',
247 Runic::LetterDottedDashL => 'ᛛ',
248 Runic::LetterIngwaz => 'ᛜ',
249 Runic::LetterIng => 'ᛝ',
250 Runic::LetterDagazDaegD => 'ᛞ',
251 Runic::LetterOthalanEthelO => 'ᛟ',
252 Runic::LetterEar => 'ᛠ',
253 Runic::LetterIor => 'ᛡ',
254 Runic::LetterCweorth => 'ᛢ',
255 Runic::LetterCalc => 'ᛣ',
256 Runic::LetterCealc => 'ᛤ',
257 Runic::LetterStan => 'ᛥ',
258 Runic::LetterLongDashBranchDashYr => 'ᛦ',
259 Runic::LetterShortDashTwigDashYr => 'ᛧ',
260 Runic::LetterIcelandicDashYr => 'ᛨ',
261 Runic::LetterQ => 'ᛩ',
262 Runic::LetterX => 'ᛪ',
263 Runic::SinglePunctuation => '᛫',
264 Runic::MultiplePunctuation => '᛬',
265 Runic::CrossPunctuation => '᛭',
266 Runic::ArlaugSymbol => 'ᛮ',
267 Runic::TvimadurSymbol => 'ᛯ',
268 Runic::BelgthorSymbol => 'ᛰ',
269 Runic::LetterK => 'ᛱ',
270 Runic::LetterSh => 'ᛲ',
271 Runic::LetterOo => 'ᛳ',
272 Runic::LetterFranksCasketOs => 'ᛴ',
273 Runic::LetterFranksCasketIs => 'ᛵ',
274 Runic::LetterFranksCasketEh => 'ᛶ',
275 Runic::LetterFranksCasketAc => 'ᛷ',
276 Runic::LetterFranksCasketAesc => 'ᛸ',
277 }
278 }
279}
280
281impl std::convert::TryFrom<char> for Runic {
282 type Error = ();
283 fn try_from(c: char) -> Result<Self, Self::Error> {
284 match c {
285 'ᚠ' => Ok(Runic::LetterFehuFeohFeF),
286 'ᚡ' => Ok(Runic::LetterV),
287 'ᚢ' => Ok(Runic::LetterUruzUrU),
288 'ᚣ' => Ok(Runic::LetterYr),
289 'ᚤ' => Ok(Runic::LetterY),
290 'ᚥ' => Ok(Runic::LetterW),
291 'ᚦ' => Ok(Runic::LetterThurisazThursThorn),
292 'ᚧ' => Ok(Runic::LetterEth),
293 'ᚨ' => Ok(Runic::LetterAnsuzA),
294 'ᚩ' => Ok(Runic::LetterOsO),
295 'ᚪ' => Ok(Runic::LetterAcA),
296 'ᚫ' => Ok(Runic::LetterAesc),
297 'ᚬ' => Ok(Runic::LetterLongDashBranchDashOssO),
298 'ᚭ' => Ok(Runic::LetterShortDashTwigDashOssO),
299 'ᚮ' => Ok(Runic::LetterO),
300 'ᚯ' => Ok(Runic::LetterOe),
301 'ᚰ' => Ok(Runic::LetterOn),
302 'ᚱ' => Ok(Runic::LetterRaidoRadReidR),
303 'ᚲ' => Ok(Runic::LetterKauna),
304 'ᚳ' => Ok(Runic::LetterCen),
305 'ᚴ' => Ok(Runic::LetterKaunK),
306 'ᚵ' => Ok(Runic::LetterG),
307 'ᚶ' => Ok(Runic::LetterEng),
308 'ᚷ' => Ok(Runic::LetterGeboGyfuG),
309 'ᚸ' => Ok(Runic::LetterGar),
310 'ᚹ' => Ok(Runic::LetterWunjoWynnW),
311 'ᚺ' => Ok(Runic::LetterHaglazH),
312 'ᚻ' => Ok(Runic::LetterHaeglH),
313 'ᚼ' => Ok(Runic::LetterLongDashBranchDashHagallH),
314 'ᚽ' => Ok(Runic::LetterShortDashTwigDashHagallH),
315 'ᚾ' => Ok(Runic::LetterNaudizNydNaudN),
316 'ᚿ' => Ok(Runic::LetterShortDashTwigDashNaudN),
317 'ᛀ' => Ok(Runic::LetterDottedDashN),
318 'ᛁ' => Ok(Runic::LetterIsazIsIssI),
319 'ᛂ' => Ok(Runic::LetterE),
320 'ᛃ' => Ok(Runic::LetterJeranJ),
321 'ᛄ' => Ok(Runic::LetterGer),
322 'ᛅ' => Ok(Runic::LetterLongDashBranchDashArAe),
323 'ᛆ' => Ok(Runic::LetterShortDashTwigDashArA),
324 'ᛇ' => Ok(Runic::LetterIwazEoh),
325 'ᛈ' => Ok(Runic::LetterPerthoPeorthP),
326 'ᛉ' => Ok(Runic::LetterAlgizEolhx),
327 'ᛊ' => Ok(Runic::LetterSowiloS),
328 'ᛋ' => Ok(Runic::LetterSigelLongDashBranchDashSolS),
329 'ᛌ' => Ok(Runic::LetterShortDashTwigDashSolS),
330 'ᛍ' => Ok(Runic::LetterC),
331 'ᛎ' => Ok(Runic::LetterZ),
332 'ᛏ' => Ok(Runic::LetterTiwazTirTyrT),
333 'ᛐ' => Ok(Runic::LetterShortDashTwigDashTyrT),
334 'ᛑ' => Ok(Runic::LetterD),
335 'ᛒ' => Ok(Runic::LetterBerkananBeorcBjarkanB),
336 'ᛓ' => Ok(Runic::LetterShortDashTwigDashBjarkanB),
337 'ᛔ' => Ok(Runic::LetterDottedDashP),
338 'ᛕ' => Ok(Runic::LetterOpenDashP),
339 'ᛖ' => Ok(Runic::LetterEhwazEhE),
340 'ᛗ' => Ok(Runic::LetterMannazManM),
341 'ᛘ' => Ok(Runic::LetterLongDashBranchDashMadrM),
342 'ᛙ' => Ok(Runic::LetterShortDashTwigDashMadrM),
343 'ᛚ' => Ok(Runic::LetterLaukazLaguLogrL),
344 'ᛛ' => Ok(Runic::LetterDottedDashL),
345 'ᛜ' => Ok(Runic::LetterIngwaz),
346 'ᛝ' => Ok(Runic::LetterIng),
347 'ᛞ' => Ok(Runic::LetterDagazDaegD),
348 'ᛟ' => Ok(Runic::LetterOthalanEthelO),
349 'ᛠ' => Ok(Runic::LetterEar),
350 'ᛡ' => Ok(Runic::LetterIor),
351 'ᛢ' => Ok(Runic::LetterCweorth),
352 'ᛣ' => Ok(Runic::LetterCalc),
353 'ᛤ' => Ok(Runic::LetterCealc),
354 'ᛥ' => Ok(Runic::LetterStan),
355 'ᛦ' => Ok(Runic::LetterLongDashBranchDashYr),
356 'ᛧ' => Ok(Runic::LetterShortDashTwigDashYr),
357 'ᛨ' => Ok(Runic::LetterIcelandicDashYr),
358 'ᛩ' => Ok(Runic::LetterQ),
359 'ᛪ' => Ok(Runic::LetterX),
360 '᛫' => Ok(Runic::SinglePunctuation),
361 '᛬' => Ok(Runic::MultiplePunctuation),
362 '᛭' => Ok(Runic::CrossPunctuation),
363 'ᛮ' => Ok(Runic::ArlaugSymbol),
364 'ᛯ' => Ok(Runic::TvimadurSymbol),
365 'ᛰ' => Ok(Runic::BelgthorSymbol),
366 'ᛱ' => Ok(Runic::LetterK),
367 'ᛲ' => Ok(Runic::LetterSh),
368 'ᛳ' => Ok(Runic::LetterOo),
369 'ᛴ' => Ok(Runic::LetterFranksCasketOs),
370 'ᛵ' => Ok(Runic::LetterFranksCasketIs),
371 'ᛶ' => Ok(Runic::LetterFranksCasketEh),
372 'ᛷ' => Ok(Runic::LetterFranksCasketAc),
373 'ᛸ' => Ok(Runic::LetterFranksCasketAesc),
374 _ => Err(()),
375 }
376 }
377}
378
379impl Into<u32> for Runic {
380 fn into(self) -> u32 {
381 let c: char = self.into();
382 let hex = c
383 .escape_unicode()
384 .to_string()
385 .replace("\\u{", "")
386 .replace("}", "");
387 u32::from_str_radix(&hex, 16).unwrap()
388 }
389}
390
391impl std::convert::TryFrom<u32> for Runic {
392 type Error = ();
393 fn try_from(u: u32) -> Result<Self, Self::Error> {
394 if let Ok(c) = char::try_from(u) {
395 Self::try_from(c)
396 } else {
397 Err(())
398 }
399 }
400}
401
402impl Iterator for Runic {
403 type Item = Self;
404 fn next(&mut self) -> Option<Self> {
405 let index: u32 = (*self).into();
406 use std::convert::TryFrom;
407 Self::try_from(index + 1).ok()
408 }
409}
410
411impl Runic {
412 pub fn new() -> Self {
414 Runic::LetterFehuFeohFeF
415 }
416
417 pub fn name(&self) -> String {
419 let s = std::format!("Runic{:#?}", self);
420 string_morph::to_sentence_case(&s)
421 }
422}