1
2#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
4pub enum Buginese {
5 LetterKa,
7 LetterGa,
9 LetterNga,
11 LetterNgka,
13 LetterPa,
15 LetterBa,
17 LetterMa,
19 LetterMpa,
21 LetterTa,
23 LetterDa,
25 LetterNa,
27 LetterNra,
29 LetterCa,
31 LetterJa,
33 LetterNya,
35 LetterNyca,
37 LetterYa,
39 LetterRa,
41 LetterLa,
43 LetterVa,
45 LetterSa,
47 LetterA,
49 LetterHa,
51 VowelSignI,
53 VowelSignU,
55 VowelSignE,
57 VowelSignO,
59 VowelSignAe,
61 Pallawa,
63}
64
65impl Into<char> for Buginese {
66 fn into(self) -> char {
67 match self {
68 Buginese::LetterKa => 'ᨀ',
69 Buginese::LetterGa => 'ᨁ',
70 Buginese::LetterNga => 'ᨂ',
71 Buginese::LetterNgka => 'ᨃ',
72 Buginese::LetterPa => 'ᨄ',
73 Buginese::LetterBa => 'ᨅ',
74 Buginese::LetterMa => 'ᨆ',
75 Buginese::LetterMpa => 'ᨇ',
76 Buginese::LetterTa => 'ᨈ',
77 Buginese::LetterDa => 'ᨉ',
78 Buginese::LetterNa => 'ᨊ',
79 Buginese::LetterNra => 'ᨋ',
80 Buginese::LetterCa => 'ᨌ',
81 Buginese::LetterJa => 'ᨍ',
82 Buginese::LetterNya => 'ᨎ',
83 Buginese::LetterNyca => 'ᨏ',
84 Buginese::LetterYa => 'ᨐ',
85 Buginese::LetterRa => 'ᨑ',
86 Buginese::LetterLa => 'ᨒ',
87 Buginese::LetterVa => 'ᨓ',
88 Buginese::LetterSa => 'ᨔ',
89 Buginese::LetterA => 'ᨕ',
90 Buginese::LetterHa => 'ᨖ',
91 Buginese::VowelSignI => 'ᨗ',
92 Buginese::VowelSignU => 'ᨘ',
93 Buginese::VowelSignE => 'ᨙ',
94 Buginese::VowelSignO => 'ᨚ',
95 Buginese::VowelSignAe => 'ᨛ',
96 Buginese::Pallawa => '᨞',
97 }
98 }
99}
100
101impl std::convert::TryFrom<char> for Buginese {
102 type Error = ();
103 fn try_from(c: char) -> Result<Self, Self::Error> {
104 match c {
105 'ᨀ' => Ok(Buginese::LetterKa),
106 'ᨁ' => Ok(Buginese::LetterGa),
107 'ᨂ' => Ok(Buginese::LetterNga),
108 'ᨃ' => Ok(Buginese::LetterNgka),
109 'ᨄ' => Ok(Buginese::LetterPa),
110 'ᨅ' => Ok(Buginese::LetterBa),
111 'ᨆ' => Ok(Buginese::LetterMa),
112 'ᨇ' => Ok(Buginese::LetterMpa),
113 'ᨈ' => Ok(Buginese::LetterTa),
114 'ᨉ' => Ok(Buginese::LetterDa),
115 'ᨊ' => Ok(Buginese::LetterNa),
116 'ᨋ' => Ok(Buginese::LetterNra),
117 'ᨌ' => Ok(Buginese::LetterCa),
118 'ᨍ' => Ok(Buginese::LetterJa),
119 'ᨎ' => Ok(Buginese::LetterNya),
120 'ᨏ' => Ok(Buginese::LetterNyca),
121 'ᨐ' => Ok(Buginese::LetterYa),
122 'ᨑ' => Ok(Buginese::LetterRa),
123 'ᨒ' => Ok(Buginese::LetterLa),
124 'ᨓ' => Ok(Buginese::LetterVa),
125 'ᨔ' => Ok(Buginese::LetterSa),
126 'ᨕ' => Ok(Buginese::LetterA),
127 'ᨖ' => Ok(Buginese::LetterHa),
128 'ᨗ' => Ok(Buginese::VowelSignI),
129 'ᨘ' => Ok(Buginese::VowelSignU),
130 'ᨙ' => Ok(Buginese::VowelSignE),
131 'ᨚ' => Ok(Buginese::VowelSignO),
132 'ᨛ' => Ok(Buginese::VowelSignAe),
133 '᨞' => Ok(Buginese::Pallawa),
134 _ => Err(()),
135 }
136 }
137}
138
139impl Into<u32> for Buginese {
140 fn into(self) -> u32 {
141 let c: char = self.into();
142 let hex = c
143 .escape_unicode()
144 .to_string()
145 .replace("\\u{", "")
146 .replace("}", "");
147 u32::from_str_radix(&hex, 16).unwrap()
148 }
149}
150
151impl std::convert::TryFrom<u32> for Buginese {
152 type Error = ();
153 fn try_from(u: u32) -> Result<Self, Self::Error> {
154 if let Ok(c) = char::try_from(u) {
155 Self::try_from(c)
156 } else {
157 Err(())
158 }
159 }
160}
161
162impl Iterator for Buginese {
163 type Item = Self;
164 fn next(&mut self) -> Option<Self> {
165 let index: u32 = (*self).into();
166 use std::convert::TryFrom;
167 Self::try_from(index + 1).ok()
168 }
169}
170
171impl Buginese {
172 pub fn new() -> Self {
174 Buginese::LetterKa
175 }
176
177 pub fn name(&self) -> String {
179 let s = std::format!("Buginese{:#?}", self);
180 string_morph::to_sentence_case(&s)
181 }
182}