1
2#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
4pub enum KanaExtendedA {
5 HentaiganaLetterReDash3,
7 HentaiganaLetterReDash4,
9 HentaiganaLetterRoDash1,
11 HentaiganaLetterRoDash2,
13 HentaiganaLetterRoDash3,
15 HentaiganaLetterRoDash4,
17 HentaiganaLetterRoDash5,
19 HentaiganaLetterRoDash6,
21 HentaiganaLetterWaDash1,
23 HentaiganaLetterWaDash2,
25 HentaiganaLetterWaDash3,
27 HentaiganaLetterWaDash4,
29 HentaiganaLetterWaDash5,
31 HentaiganaLetterWiDash1,
33 HentaiganaLetterWiDash2,
35 HentaiganaLetterWiDash3,
37 HentaiganaLetterWiDash4,
39 HentaiganaLetterWiDash5,
41 HentaiganaLetterWeDash1,
43 HentaiganaLetterWeDash2,
45 HentaiganaLetterWeDash3,
47 HentaiganaLetterWeDash4,
49 HentaiganaLetterWoDash1,
51 HentaiganaLetterWoDash2,
53 HentaiganaLetterWoDash3,
55 HentaiganaLetterWoDash4,
57 HentaiganaLetterWoDash5,
59 HentaiganaLetterWoDash6,
61 HentaiganaLetterWoDash7,
63 HentaiganaLetterNDashMuDashMoDash1,
65 HentaiganaLetterNDashMuDashMoDash2,
67}
68
69impl Into<char> for KanaExtendedA {
70 fn into(self) -> char {
71 match self {
72 KanaExtendedA::HentaiganaLetterReDash3 => '𛄀',
73 KanaExtendedA::HentaiganaLetterReDash4 => '𛄁',
74 KanaExtendedA::HentaiganaLetterRoDash1 => '𛄂',
75 KanaExtendedA::HentaiganaLetterRoDash2 => '𛄃',
76 KanaExtendedA::HentaiganaLetterRoDash3 => '𛄄',
77 KanaExtendedA::HentaiganaLetterRoDash4 => '𛄅',
78 KanaExtendedA::HentaiganaLetterRoDash5 => '𛄆',
79 KanaExtendedA::HentaiganaLetterRoDash6 => '𛄇',
80 KanaExtendedA::HentaiganaLetterWaDash1 => '𛄈',
81 KanaExtendedA::HentaiganaLetterWaDash2 => '𛄉',
82 KanaExtendedA::HentaiganaLetterWaDash3 => '𛄊',
83 KanaExtendedA::HentaiganaLetterWaDash4 => '𛄋',
84 KanaExtendedA::HentaiganaLetterWaDash5 => '𛄌',
85 KanaExtendedA::HentaiganaLetterWiDash1 => '𛄍',
86 KanaExtendedA::HentaiganaLetterWiDash2 => '𛄎',
87 KanaExtendedA::HentaiganaLetterWiDash3 => '𛄏',
88 KanaExtendedA::HentaiganaLetterWiDash4 => '𛄐',
89 KanaExtendedA::HentaiganaLetterWiDash5 => '𛄑',
90 KanaExtendedA::HentaiganaLetterWeDash1 => '𛄒',
91 KanaExtendedA::HentaiganaLetterWeDash2 => '𛄓',
92 KanaExtendedA::HentaiganaLetterWeDash3 => '𛄔',
93 KanaExtendedA::HentaiganaLetterWeDash4 => '𛄕',
94 KanaExtendedA::HentaiganaLetterWoDash1 => '𛄖',
95 KanaExtendedA::HentaiganaLetterWoDash2 => '𛄗',
96 KanaExtendedA::HentaiganaLetterWoDash3 => '𛄘',
97 KanaExtendedA::HentaiganaLetterWoDash4 => '𛄙',
98 KanaExtendedA::HentaiganaLetterWoDash5 => '𛄚',
99 KanaExtendedA::HentaiganaLetterWoDash6 => '𛄛',
100 KanaExtendedA::HentaiganaLetterWoDash7 => '𛄜',
101 KanaExtendedA::HentaiganaLetterNDashMuDashMoDash1 => '𛄝',
102 KanaExtendedA::HentaiganaLetterNDashMuDashMoDash2 => '𛄞',
103 }
104 }
105}
106
107impl std::convert::TryFrom<char> for KanaExtendedA {
108 type Error = ();
109 fn try_from(c: char) -> Result<Self, Self::Error> {
110 match c {
111 '𛄀' => Ok(KanaExtendedA::HentaiganaLetterReDash3),
112 '𛄁' => Ok(KanaExtendedA::HentaiganaLetterReDash4),
113 '𛄂' => Ok(KanaExtendedA::HentaiganaLetterRoDash1),
114 '𛄃' => Ok(KanaExtendedA::HentaiganaLetterRoDash2),
115 '𛄄' => Ok(KanaExtendedA::HentaiganaLetterRoDash3),
116 '𛄅' => Ok(KanaExtendedA::HentaiganaLetterRoDash4),
117 '𛄆' => Ok(KanaExtendedA::HentaiganaLetterRoDash5),
118 '𛄇' => Ok(KanaExtendedA::HentaiganaLetterRoDash6),
119 '𛄈' => Ok(KanaExtendedA::HentaiganaLetterWaDash1),
120 '𛄉' => Ok(KanaExtendedA::HentaiganaLetterWaDash2),
121 '𛄊' => Ok(KanaExtendedA::HentaiganaLetterWaDash3),
122 '𛄋' => Ok(KanaExtendedA::HentaiganaLetterWaDash4),
123 '𛄌' => Ok(KanaExtendedA::HentaiganaLetterWaDash5),
124 '𛄍' => Ok(KanaExtendedA::HentaiganaLetterWiDash1),
125 '𛄎' => Ok(KanaExtendedA::HentaiganaLetterWiDash2),
126 '𛄏' => Ok(KanaExtendedA::HentaiganaLetterWiDash3),
127 '𛄐' => Ok(KanaExtendedA::HentaiganaLetterWiDash4),
128 '𛄑' => Ok(KanaExtendedA::HentaiganaLetterWiDash5),
129 '𛄒' => Ok(KanaExtendedA::HentaiganaLetterWeDash1),
130 '𛄓' => Ok(KanaExtendedA::HentaiganaLetterWeDash2),
131 '𛄔' => Ok(KanaExtendedA::HentaiganaLetterWeDash3),
132 '𛄕' => Ok(KanaExtendedA::HentaiganaLetterWeDash4),
133 '𛄖' => Ok(KanaExtendedA::HentaiganaLetterWoDash1),
134 '𛄗' => Ok(KanaExtendedA::HentaiganaLetterWoDash2),
135 '𛄘' => Ok(KanaExtendedA::HentaiganaLetterWoDash3),
136 '𛄙' => Ok(KanaExtendedA::HentaiganaLetterWoDash4),
137 '𛄚' => Ok(KanaExtendedA::HentaiganaLetterWoDash5),
138 '𛄛' => Ok(KanaExtendedA::HentaiganaLetterWoDash6),
139 '𛄜' => Ok(KanaExtendedA::HentaiganaLetterWoDash7),
140 '𛄝' => Ok(KanaExtendedA::HentaiganaLetterNDashMuDashMoDash1),
141 '𛄞' => Ok(KanaExtendedA::HentaiganaLetterNDashMuDashMoDash2),
142 _ => Err(()),
143 }
144 }
145}
146
147impl Into<u32> for KanaExtendedA {
148 fn into(self) -> u32 {
149 let c: char = self.into();
150 let hex = c
151 .escape_unicode()
152 .to_string()
153 .replace("\\u{", "")
154 .replace("}", "");
155 u32::from_str_radix(&hex, 16).unwrap()
156 }
157}
158
159impl std::convert::TryFrom<u32> for KanaExtendedA {
160 type Error = ();
161 fn try_from(u: u32) -> Result<Self, Self::Error> {
162 if let Ok(c) = char::try_from(u) {
163 Self::try_from(c)
164 } else {
165 Err(())
166 }
167 }
168}
169
170impl Iterator for KanaExtendedA {
171 type Item = Self;
172 fn next(&mut self) -> Option<Self> {
173 let index: u32 = (*self).into();
174 use std::convert::TryFrom;
175 Self::try_from(index + 1).ok()
176 }
177}
178
179impl KanaExtendedA {
180 pub fn new() -> Self {
182 KanaExtendedA::HentaiganaLetterReDash3
183 }
184
185 pub fn name(&self) -> String {
187 let s = std::format!("KanaExtendedA{:#?}", self);
188 string_morph::to_sentence_case(&s)
189 }
190}