1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442

/// An enum to represent all characters in the HangulCompatibilityJamo block.
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum HangulCompatibilityJamo {
    /// \u{3131}: 'ㄱ'
    HangulLetterKiyeok,
    /// \u{3132}: 'ㄲ'
    HangulLetterSsangkiyeok,
    /// \u{3133}: 'ㄳ'
    HangulLetterKiyeokDashSios,
    /// \u{3134}: 'ㄴ'
    HangulLetterNieun,
    /// \u{3135}: 'ㄵ'
    HangulLetterNieunDashCieuc,
    /// \u{3136}: 'ㄶ'
    HangulLetterNieunDashHieuh,
    /// \u{3137}: 'ㄷ'
    HangulLetterTikeut,
    /// \u{3138}: 'ㄸ'
    HangulLetterSsangtikeut,
    /// \u{3139}: 'ㄹ'
    HangulLetterRieul,
    /// \u{313a}: 'ㄺ'
    HangulLetterRieulDashKiyeok,
    /// \u{313b}: 'ㄻ'
    HangulLetterRieulDashMieum,
    /// \u{313c}: 'ㄼ'
    HangulLetterRieulDashPieup,
    /// \u{313d}: 'ㄽ'
    HangulLetterRieulDashSios,
    /// \u{313e}: 'ㄾ'
    HangulLetterRieulDashThieuth,
    /// \u{313f}: 'ㄿ'
    HangulLetterRieulDashPhieuph,
    /// \u{3140}: 'ㅀ'
    HangulLetterRieulDashHieuh,
    /// \u{3141}: 'ㅁ'
    HangulLetterMieum,
    /// \u{3142}: 'ㅂ'
    HangulLetterPieup,
    /// \u{3143}: 'ㅃ'
    HangulLetterSsangpieup,
    /// \u{3144}: 'ㅄ'
    HangulLetterPieupDashSios,
    /// \u{3145}: 'ㅅ'
    HangulLetterSios,
    /// \u{3146}: 'ㅆ'
    HangulLetterSsangsios,
    /// \u{3147}: 'ㅇ'
    HangulLetterIeung,
    /// \u{3148}: 'ㅈ'
    HangulLetterCieuc,
    /// \u{3149}: 'ㅉ'
    HangulLetterSsangcieuc,
    /// \u{314a}: 'ㅊ'
    HangulLetterChieuch,
    /// \u{314b}: 'ㅋ'
    HangulLetterKhieukh,
    /// \u{314c}: 'ㅌ'
    HangulLetterThieuth,
    /// \u{314d}: 'ㅍ'
    HangulLetterPhieuph,
    /// \u{314e}: 'ㅎ'
    HangulLetterHieuh,
    /// \u{314f}: 'ㅏ'
    HangulLetterA,
    /// \u{3150}: 'ㅐ'
    HangulLetterAe,
    /// \u{3151}: 'ㅑ'
    HangulLetterYa,
    /// \u{3152}: 'ㅒ'
    HangulLetterYae,
    /// \u{3153}: 'ㅓ'
    HangulLetterEo,
    /// \u{3154}: 'ㅔ'
    HangulLetterE,
    /// \u{3155}: 'ㅕ'
    HangulLetterYeo,
    /// \u{3156}: 'ㅖ'
    HangulLetterYe,
    /// \u{3157}: 'ㅗ'
    HangulLetterO,
    /// \u{3158}: 'ㅘ'
    HangulLetterWa,
    /// \u{3159}: 'ㅙ'
    HangulLetterWae,
    /// \u{315a}: 'ㅚ'
    HangulLetterOe,
    /// \u{315b}: 'ㅛ'
    HangulLetterYo,
    /// \u{315c}: 'ㅜ'
    HangulLetterU,
    /// \u{315d}: 'ㅝ'
    HangulLetterWeo,
    /// \u{315e}: 'ㅞ'
    HangulLetterWe,
    /// \u{315f}: 'ㅟ'
    HangulLetterWi,
    /// \u{3160}: 'ㅠ'
    HangulLetterYu,
    /// \u{3161}: 'ㅡ'
    HangulLetterEu,
    /// \u{3162}: 'ㅢ'
    HangulLetterYi,
    /// \u{3163}: 'ㅣ'
    HangulLetterI,
    /// \u{3164}: 'ㅤ'
    HangulFiller,
    /// \u{3165}: 'ㅥ'
    HangulLetterSsangnieun,
    /// \u{3166}: 'ㅦ'
    HangulLetterNieunDashTikeut,
    /// \u{3167}: 'ㅧ'
    HangulLetterNieunDashSios,
    /// \u{3168}: 'ㅨ'
    HangulLetterNieunDashPansios,
    /// \u{3169}: 'ㅩ'
    HangulLetterRieulDashKiyeokDashSios,
    /// \u{316a}: 'ㅪ'
    HangulLetterRieulDashTikeut,
    /// \u{316b}: 'ㅫ'
    HangulLetterRieulDashPieupDashSios,
    /// \u{316c}: 'ㅬ'
    HangulLetterRieulDashPansios,
    /// \u{316d}: 'ㅭ'
    HangulLetterRieulDashYeorinhieuh,
    /// \u{316e}: 'ㅮ'
    HangulLetterMieumDashPieup,
    /// \u{316f}: 'ㅯ'
    HangulLetterMieumDashSios,
    /// \u{3170}: 'ㅰ'
    HangulLetterMieumDashPansios,
    /// \u{3171}: 'ㅱ'
    HangulLetterKapyeounmieum,
    /// \u{3172}: 'ㅲ'
    HangulLetterPieupDashKiyeok,
    /// \u{3173}: 'ㅳ'
    HangulLetterPieupDashTikeut,
    /// \u{3174}: 'ㅴ'
    HangulLetterPieupDashSiosDashKiyeok,
    /// \u{3175}: 'ㅵ'
    HangulLetterPieupDashSiosDashTikeut,
    /// \u{3176}: 'ㅶ'
    HangulLetterPieupDashCieuc,
    /// \u{3177}: 'ㅷ'
    HangulLetterPieupDashThieuth,
    /// \u{3178}: 'ㅸ'
    HangulLetterKapyeounpieup,
    /// \u{3179}: 'ㅹ'
    HangulLetterKapyeounssangpieup,
    /// \u{317a}: 'ㅺ'
    HangulLetterSiosDashKiyeok,
    /// \u{317b}: 'ㅻ'
    HangulLetterSiosDashNieun,
    /// \u{317c}: 'ㅼ'
    HangulLetterSiosDashTikeut,
    /// \u{317d}: 'ㅽ'
    HangulLetterSiosDashPieup,
    /// \u{317e}: 'ㅾ'
    HangulLetterSiosDashCieuc,
    /// \u{317f}: 'ㅿ'
    HangulLetterPansios,
    /// \u{3180}: 'ㆀ'
    HangulLetterSsangieung,
    /// \u{3181}: 'ㆁ'
    HangulLetterYesieung,
    /// \u{3182}: 'ㆂ'
    HangulLetterYesieungDashSios,
    /// \u{3183}: 'ㆃ'
    HangulLetterYesieungDashPansios,
    /// \u{3184}: 'ㆄ'
    HangulLetterKapyeounphieuph,
    /// \u{3185}: 'ㆅ'
    HangulLetterSsanghieuh,
    /// \u{3186}: 'ㆆ'
    HangulLetterYeorinhieuh,
    /// \u{3187}: 'ㆇ'
    HangulLetterYoDashYa,
    /// \u{3188}: 'ㆈ'
    HangulLetterYoDashYae,
    /// \u{3189}: 'ㆉ'
    HangulLetterYoDashI,
    /// \u{318a}: 'ㆊ'
    HangulLetterYuDashYeo,
    /// \u{318b}: 'ㆋ'
    HangulLetterYuDashYe,
    /// \u{318c}: 'ㆌ'
    HangulLetterYuDashI,
    /// \u{318d}: 'ㆍ'
    HangulLetterAraea,
    /// \u{318e}: 'ㆎ'
    HangulLetterAraeae,
}

impl Into<char> for HangulCompatibilityJamo {
    fn into(self) -> char {
        match self {
            HangulCompatibilityJamo::HangulLetterKiyeok => 'ㄱ',
            HangulCompatibilityJamo::HangulLetterSsangkiyeok => 'ㄲ',
            HangulCompatibilityJamo::HangulLetterKiyeokDashSios => 'ㄳ',
            HangulCompatibilityJamo::HangulLetterNieun => 'ㄴ',
            HangulCompatibilityJamo::HangulLetterNieunDashCieuc => 'ㄵ',
            HangulCompatibilityJamo::HangulLetterNieunDashHieuh => 'ㄶ',
            HangulCompatibilityJamo::HangulLetterTikeut => 'ㄷ',
            HangulCompatibilityJamo::HangulLetterSsangtikeut => 'ㄸ',
            HangulCompatibilityJamo::HangulLetterRieul => 'ㄹ',
            HangulCompatibilityJamo::HangulLetterRieulDashKiyeok => 'ㄺ',
            HangulCompatibilityJamo::HangulLetterRieulDashMieum => 'ㄻ',
            HangulCompatibilityJamo::HangulLetterRieulDashPieup => 'ㄼ',
            HangulCompatibilityJamo::HangulLetterRieulDashSios => 'ㄽ',
            HangulCompatibilityJamo::HangulLetterRieulDashThieuth => 'ㄾ',
            HangulCompatibilityJamo::HangulLetterRieulDashPhieuph => 'ㄿ',
            HangulCompatibilityJamo::HangulLetterRieulDashHieuh => 'ㅀ',
            HangulCompatibilityJamo::HangulLetterMieum => 'ㅁ',
            HangulCompatibilityJamo::HangulLetterPieup => 'ㅂ',
            HangulCompatibilityJamo::HangulLetterSsangpieup => 'ㅃ',
            HangulCompatibilityJamo::HangulLetterPieupDashSios => 'ㅄ',
            HangulCompatibilityJamo::HangulLetterSios => 'ㅅ',
            HangulCompatibilityJamo::HangulLetterSsangsios => 'ㅆ',
            HangulCompatibilityJamo::HangulLetterIeung => 'ㅇ',
            HangulCompatibilityJamo::HangulLetterCieuc => 'ㅈ',
            HangulCompatibilityJamo::HangulLetterSsangcieuc => 'ㅉ',
            HangulCompatibilityJamo::HangulLetterChieuch => 'ㅊ',
            HangulCompatibilityJamo::HangulLetterKhieukh => 'ㅋ',
            HangulCompatibilityJamo::HangulLetterThieuth => 'ㅌ',
            HangulCompatibilityJamo::HangulLetterPhieuph => 'ㅍ',
            HangulCompatibilityJamo::HangulLetterHieuh => 'ㅎ',
            HangulCompatibilityJamo::HangulLetterA => 'ㅏ',
            HangulCompatibilityJamo::HangulLetterAe => 'ㅐ',
            HangulCompatibilityJamo::HangulLetterYa => 'ㅑ',
            HangulCompatibilityJamo::HangulLetterYae => 'ㅒ',
            HangulCompatibilityJamo::HangulLetterEo => 'ㅓ',
            HangulCompatibilityJamo::HangulLetterE => 'ㅔ',
            HangulCompatibilityJamo::HangulLetterYeo => 'ㅕ',
            HangulCompatibilityJamo::HangulLetterYe => 'ㅖ',
            HangulCompatibilityJamo::HangulLetterO => 'ㅗ',
            HangulCompatibilityJamo::HangulLetterWa => 'ㅘ',
            HangulCompatibilityJamo::HangulLetterWae => 'ㅙ',
            HangulCompatibilityJamo::HangulLetterOe => 'ㅚ',
            HangulCompatibilityJamo::HangulLetterYo => 'ㅛ',
            HangulCompatibilityJamo::HangulLetterU => 'ㅜ',
            HangulCompatibilityJamo::HangulLetterWeo => 'ㅝ',
            HangulCompatibilityJamo::HangulLetterWe => 'ㅞ',
            HangulCompatibilityJamo::HangulLetterWi => 'ㅟ',
            HangulCompatibilityJamo::HangulLetterYu => 'ㅠ',
            HangulCompatibilityJamo::HangulLetterEu => 'ㅡ',
            HangulCompatibilityJamo::HangulLetterYi => 'ㅢ',
            HangulCompatibilityJamo::HangulLetterI => 'ㅣ',
            HangulCompatibilityJamo::HangulFiller => 'ㅤ',
            HangulCompatibilityJamo::HangulLetterSsangnieun => 'ㅥ',
            HangulCompatibilityJamo::HangulLetterNieunDashTikeut => 'ㅦ',
            HangulCompatibilityJamo::HangulLetterNieunDashSios => 'ㅧ',
            HangulCompatibilityJamo::HangulLetterNieunDashPansios => 'ㅨ',
            HangulCompatibilityJamo::HangulLetterRieulDashKiyeokDashSios => 'ㅩ',
            HangulCompatibilityJamo::HangulLetterRieulDashTikeut => 'ㅪ',
            HangulCompatibilityJamo::HangulLetterRieulDashPieupDashSios => 'ㅫ',
            HangulCompatibilityJamo::HangulLetterRieulDashPansios => 'ㅬ',
            HangulCompatibilityJamo::HangulLetterRieulDashYeorinhieuh => 'ㅭ',
            HangulCompatibilityJamo::HangulLetterMieumDashPieup => 'ㅮ',
            HangulCompatibilityJamo::HangulLetterMieumDashSios => 'ㅯ',
            HangulCompatibilityJamo::HangulLetterMieumDashPansios => 'ㅰ',
            HangulCompatibilityJamo::HangulLetterKapyeounmieum => 'ㅱ',
            HangulCompatibilityJamo::HangulLetterPieupDashKiyeok => 'ㅲ',
            HangulCompatibilityJamo::HangulLetterPieupDashTikeut => 'ㅳ',
            HangulCompatibilityJamo::HangulLetterPieupDashSiosDashKiyeok => 'ㅴ',
            HangulCompatibilityJamo::HangulLetterPieupDashSiosDashTikeut => 'ㅵ',
            HangulCompatibilityJamo::HangulLetterPieupDashCieuc => 'ㅶ',
            HangulCompatibilityJamo::HangulLetterPieupDashThieuth => 'ㅷ',
            HangulCompatibilityJamo::HangulLetterKapyeounpieup => 'ㅸ',
            HangulCompatibilityJamo::HangulLetterKapyeounssangpieup => 'ㅹ',
            HangulCompatibilityJamo::HangulLetterSiosDashKiyeok => 'ㅺ',
            HangulCompatibilityJamo::HangulLetterSiosDashNieun => 'ㅻ',
            HangulCompatibilityJamo::HangulLetterSiosDashTikeut => 'ㅼ',
            HangulCompatibilityJamo::HangulLetterSiosDashPieup => 'ㅽ',
            HangulCompatibilityJamo::HangulLetterSiosDashCieuc => 'ㅾ',
            HangulCompatibilityJamo::HangulLetterPansios => 'ㅿ',
            HangulCompatibilityJamo::HangulLetterSsangieung => 'ㆀ',
            HangulCompatibilityJamo::HangulLetterYesieung => 'ㆁ',
            HangulCompatibilityJamo::HangulLetterYesieungDashSios => 'ㆂ',
            HangulCompatibilityJamo::HangulLetterYesieungDashPansios => 'ㆃ',
            HangulCompatibilityJamo::HangulLetterKapyeounphieuph => 'ㆄ',
            HangulCompatibilityJamo::HangulLetterSsanghieuh => 'ㆅ',
            HangulCompatibilityJamo::HangulLetterYeorinhieuh => 'ㆆ',
            HangulCompatibilityJamo::HangulLetterYoDashYa => 'ㆇ',
            HangulCompatibilityJamo::HangulLetterYoDashYae => 'ㆈ',
            HangulCompatibilityJamo::HangulLetterYoDashI => 'ㆉ',
            HangulCompatibilityJamo::HangulLetterYuDashYeo => 'ㆊ',
            HangulCompatibilityJamo::HangulLetterYuDashYe => 'ㆋ',
            HangulCompatibilityJamo::HangulLetterYuDashI => 'ㆌ',
            HangulCompatibilityJamo::HangulLetterAraea => 'ㆍ',
            HangulCompatibilityJamo::HangulLetterAraeae => 'ㆎ',
        }
    }
}

impl std::convert::TryFrom<char> for HangulCompatibilityJamo {
    type Error = ();
    fn try_from(c: char) -> Result<Self, Self::Error> {
        match c {
            'ㄱ' => Ok(HangulCompatibilityJamo::HangulLetterKiyeok),
            'ㄲ' => Ok(HangulCompatibilityJamo::HangulLetterSsangkiyeok),
            'ㄳ' => Ok(HangulCompatibilityJamo::HangulLetterKiyeokDashSios),
            'ㄴ' => Ok(HangulCompatibilityJamo::HangulLetterNieun),
            'ㄵ' => Ok(HangulCompatibilityJamo::HangulLetterNieunDashCieuc),
            'ㄶ' => Ok(HangulCompatibilityJamo::HangulLetterNieunDashHieuh),
            'ㄷ' => Ok(HangulCompatibilityJamo::HangulLetterTikeut),
            'ㄸ' => Ok(HangulCompatibilityJamo::HangulLetterSsangtikeut),
            'ㄹ' => Ok(HangulCompatibilityJamo::HangulLetterRieul),
            'ㄺ' => Ok(HangulCompatibilityJamo::HangulLetterRieulDashKiyeok),
            'ㄻ' => Ok(HangulCompatibilityJamo::HangulLetterRieulDashMieum),
            'ㄼ' => Ok(HangulCompatibilityJamo::HangulLetterRieulDashPieup),
            'ㄽ' => Ok(HangulCompatibilityJamo::HangulLetterRieulDashSios),
            'ㄾ' => Ok(HangulCompatibilityJamo::HangulLetterRieulDashThieuth),
            'ㄿ' => Ok(HangulCompatibilityJamo::HangulLetterRieulDashPhieuph),
            'ㅀ' => Ok(HangulCompatibilityJamo::HangulLetterRieulDashHieuh),
            'ㅁ' => Ok(HangulCompatibilityJamo::HangulLetterMieum),
            'ㅂ' => Ok(HangulCompatibilityJamo::HangulLetterPieup),
            'ㅃ' => Ok(HangulCompatibilityJamo::HangulLetterSsangpieup),
            'ㅄ' => Ok(HangulCompatibilityJamo::HangulLetterPieupDashSios),
            'ㅅ' => Ok(HangulCompatibilityJamo::HangulLetterSios),
            'ㅆ' => Ok(HangulCompatibilityJamo::HangulLetterSsangsios),
            'ㅇ' => Ok(HangulCompatibilityJamo::HangulLetterIeung),
            'ㅈ' => Ok(HangulCompatibilityJamo::HangulLetterCieuc),
            'ㅉ' => Ok(HangulCompatibilityJamo::HangulLetterSsangcieuc),
            'ㅊ' => Ok(HangulCompatibilityJamo::HangulLetterChieuch),
            'ㅋ' => Ok(HangulCompatibilityJamo::HangulLetterKhieukh),
            'ㅌ' => Ok(HangulCompatibilityJamo::HangulLetterThieuth),
            'ㅍ' => Ok(HangulCompatibilityJamo::HangulLetterPhieuph),
            'ㅎ' => Ok(HangulCompatibilityJamo::HangulLetterHieuh),
            'ㅏ' => Ok(HangulCompatibilityJamo::HangulLetterA),
            'ㅐ' => Ok(HangulCompatibilityJamo::HangulLetterAe),
            'ㅑ' => Ok(HangulCompatibilityJamo::HangulLetterYa),
            'ㅒ' => Ok(HangulCompatibilityJamo::HangulLetterYae),
            'ㅓ' => Ok(HangulCompatibilityJamo::HangulLetterEo),
            'ㅔ' => Ok(HangulCompatibilityJamo::HangulLetterE),
            'ㅕ' => Ok(HangulCompatibilityJamo::HangulLetterYeo),
            'ㅖ' => Ok(HangulCompatibilityJamo::HangulLetterYe),
            'ㅗ' => Ok(HangulCompatibilityJamo::HangulLetterO),
            'ㅘ' => Ok(HangulCompatibilityJamo::HangulLetterWa),
            'ㅙ' => Ok(HangulCompatibilityJamo::HangulLetterWae),
            'ㅚ' => Ok(HangulCompatibilityJamo::HangulLetterOe),
            'ㅛ' => Ok(HangulCompatibilityJamo::HangulLetterYo),
            'ㅜ' => Ok(HangulCompatibilityJamo::HangulLetterU),
            'ㅝ' => Ok(HangulCompatibilityJamo::HangulLetterWeo),
            'ㅞ' => Ok(HangulCompatibilityJamo::HangulLetterWe),
            'ㅟ' => Ok(HangulCompatibilityJamo::HangulLetterWi),
            'ㅠ' => Ok(HangulCompatibilityJamo::HangulLetterYu),
            'ㅡ' => Ok(HangulCompatibilityJamo::HangulLetterEu),
            'ㅢ' => Ok(HangulCompatibilityJamo::HangulLetterYi),
            'ㅣ' => Ok(HangulCompatibilityJamo::HangulLetterI),
            'ㅤ' => Ok(HangulCompatibilityJamo::HangulFiller),
            'ㅥ' => Ok(HangulCompatibilityJamo::HangulLetterSsangnieun),
            'ㅦ' => Ok(HangulCompatibilityJamo::HangulLetterNieunDashTikeut),
            'ㅧ' => Ok(HangulCompatibilityJamo::HangulLetterNieunDashSios),
            'ㅨ' => Ok(HangulCompatibilityJamo::HangulLetterNieunDashPansios),
            'ㅩ' => Ok(HangulCompatibilityJamo::HangulLetterRieulDashKiyeokDashSios),
            'ㅪ' => Ok(HangulCompatibilityJamo::HangulLetterRieulDashTikeut),
            'ㅫ' => Ok(HangulCompatibilityJamo::HangulLetterRieulDashPieupDashSios),
            'ㅬ' => Ok(HangulCompatibilityJamo::HangulLetterRieulDashPansios),
            'ㅭ' => Ok(HangulCompatibilityJamo::HangulLetterRieulDashYeorinhieuh),
            'ㅮ' => Ok(HangulCompatibilityJamo::HangulLetterMieumDashPieup),
            'ㅯ' => Ok(HangulCompatibilityJamo::HangulLetterMieumDashSios),
            'ㅰ' => Ok(HangulCompatibilityJamo::HangulLetterMieumDashPansios),
            'ㅱ' => Ok(HangulCompatibilityJamo::HangulLetterKapyeounmieum),
            'ㅲ' => Ok(HangulCompatibilityJamo::HangulLetterPieupDashKiyeok),
            'ㅳ' => Ok(HangulCompatibilityJamo::HangulLetterPieupDashTikeut),
            'ㅴ' => Ok(HangulCompatibilityJamo::HangulLetterPieupDashSiosDashKiyeok),
            'ㅵ' => Ok(HangulCompatibilityJamo::HangulLetterPieupDashSiosDashTikeut),
            'ㅶ' => Ok(HangulCompatibilityJamo::HangulLetterPieupDashCieuc),
            'ㅷ' => Ok(HangulCompatibilityJamo::HangulLetterPieupDashThieuth),
            'ㅸ' => Ok(HangulCompatibilityJamo::HangulLetterKapyeounpieup),
            'ㅹ' => Ok(HangulCompatibilityJamo::HangulLetterKapyeounssangpieup),
            'ㅺ' => Ok(HangulCompatibilityJamo::HangulLetterSiosDashKiyeok),
            'ㅻ' => Ok(HangulCompatibilityJamo::HangulLetterSiosDashNieun),
            'ㅼ' => Ok(HangulCompatibilityJamo::HangulLetterSiosDashTikeut),
            'ㅽ' => Ok(HangulCompatibilityJamo::HangulLetterSiosDashPieup),
            'ㅾ' => Ok(HangulCompatibilityJamo::HangulLetterSiosDashCieuc),
            'ㅿ' => Ok(HangulCompatibilityJamo::HangulLetterPansios),
            'ㆀ' => Ok(HangulCompatibilityJamo::HangulLetterSsangieung),
            'ㆁ' => Ok(HangulCompatibilityJamo::HangulLetterYesieung),
            'ㆂ' => Ok(HangulCompatibilityJamo::HangulLetterYesieungDashSios),
            'ㆃ' => Ok(HangulCompatibilityJamo::HangulLetterYesieungDashPansios),
            'ㆄ' => Ok(HangulCompatibilityJamo::HangulLetterKapyeounphieuph),
            'ㆅ' => Ok(HangulCompatibilityJamo::HangulLetterSsanghieuh),
            'ㆆ' => Ok(HangulCompatibilityJamo::HangulLetterYeorinhieuh),
            'ㆇ' => Ok(HangulCompatibilityJamo::HangulLetterYoDashYa),
            'ㆈ' => Ok(HangulCompatibilityJamo::HangulLetterYoDashYae),
            'ㆉ' => Ok(HangulCompatibilityJamo::HangulLetterYoDashI),
            'ㆊ' => Ok(HangulCompatibilityJamo::HangulLetterYuDashYeo),
            'ㆋ' => Ok(HangulCompatibilityJamo::HangulLetterYuDashYe),
            'ㆌ' => Ok(HangulCompatibilityJamo::HangulLetterYuDashI),
            'ㆍ' => Ok(HangulCompatibilityJamo::HangulLetterAraea),
            'ㆎ' => Ok(HangulCompatibilityJamo::HangulLetterAraeae),
            _ => Err(()),
        }
    }
}

impl Into<u32> for HangulCompatibilityJamo {
    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 HangulCompatibilityJamo {
    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 HangulCompatibilityJamo {
    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 HangulCompatibilityJamo {
    /// The character with the lowest index in this unicode block
    pub fn new() -> Self {
        HangulCompatibilityJamo::HangulLetterKiyeok
    }

    /// The character's name, in sentence case
    pub fn name(&self) -> String {
        let s = std::format!("HangulCompatibilityJamo{:#?}", self);
        string_morph::to_sentence_case(&s)
    }
}