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
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702

/// An enum to represent all characters in the EnclosedAlphanumerics block.
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum EnclosedAlphanumerics {
    /// \u{2460}: '①'
    CircledDigitOne,
    /// \u{2461}: '②'
    CircledDigitTwo,
    /// \u{2462}: '③'
    CircledDigitThree,
    /// \u{2463}: '④'
    CircledDigitFour,
    /// \u{2464}: '⑤'
    CircledDigitFive,
    /// \u{2465}: '⑥'
    CircledDigitSix,
    /// \u{2466}: '⑦'
    CircledDigitSeven,
    /// \u{2467}: '⑧'
    CircledDigitEight,
    /// \u{2468}: '⑨'
    CircledDigitNine,
    /// \u{2469}: '⑩'
    CircledNumberTen,
    /// \u{246a}: '⑪'
    CircledNumberEleven,
    /// \u{246b}: '⑫'
    CircledNumberTwelve,
    /// \u{246c}: '⑬'
    CircledNumberThirteen,
    /// \u{246d}: '⑭'
    CircledNumberFourteen,
    /// \u{246e}: '⑮'
    CircledNumberFifteen,
    /// \u{246f}: '⑯'
    CircledNumberSixteen,
    /// \u{2470}: '⑰'
    CircledNumberSeventeen,
    /// \u{2471}: '⑱'
    CircledNumberEighteen,
    /// \u{2472}: '⑲'
    CircledNumberNineteen,
    /// \u{2473}: '⑳'
    CircledNumberTwenty,
    /// \u{2474}: '⑴'
    ParenthesizedDigitOne,
    /// \u{2475}: '⑵'
    ParenthesizedDigitTwo,
    /// \u{2476}: '⑶'
    ParenthesizedDigitThree,
    /// \u{2477}: '⑷'
    ParenthesizedDigitFour,
    /// \u{2478}: '⑸'
    ParenthesizedDigitFive,
    /// \u{2479}: '⑹'
    ParenthesizedDigitSix,
    /// \u{247a}: '⑺'
    ParenthesizedDigitSeven,
    /// \u{247b}: '⑻'
    ParenthesizedDigitEight,
    /// \u{247c}: '⑼'
    ParenthesizedDigitNine,
    /// \u{247d}: '⑽'
    ParenthesizedNumberTen,
    /// \u{247e}: '⑾'
    ParenthesizedNumberEleven,
    /// \u{247f}: '⑿'
    ParenthesizedNumberTwelve,
    /// \u{2480}: '⒀'
    ParenthesizedNumberThirteen,
    /// \u{2481}: '⒁'
    ParenthesizedNumberFourteen,
    /// \u{2482}: '⒂'
    ParenthesizedNumberFifteen,
    /// \u{2483}: '⒃'
    ParenthesizedNumberSixteen,
    /// \u{2484}: '⒄'
    ParenthesizedNumberSeventeen,
    /// \u{2485}: '⒅'
    ParenthesizedNumberEighteen,
    /// \u{2486}: '⒆'
    ParenthesizedNumberNineteen,
    /// \u{2487}: '⒇'
    ParenthesizedNumberTwenty,
    /// \u{2488}: '⒈'
    DigitOneFullStop,
    /// \u{2489}: '⒉'
    DigitTwoFullStop,
    /// \u{248a}: '⒊'
    DigitThreeFullStop,
    /// \u{248b}: '⒋'
    DigitFourFullStop,
    /// \u{248c}: '⒌'
    DigitFiveFullStop,
    /// \u{248d}: '⒍'
    DigitSixFullStop,
    /// \u{248e}: '⒎'
    DigitSevenFullStop,
    /// \u{248f}: '⒏'
    DigitEightFullStop,
    /// \u{2490}: '⒐'
    DigitNineFullStop,
    /// \u{2491}: '⒑'
    NumberTenFullStop,
    /// \u{2492}: '⒒'
    NumberElevenFullStop,
    /// \u{2493}: '⒓'
    NumberTwelveFullStop,
    /// \u{2494}: '⒔'
    NumberThirteenFullStop,
    /// \u{2495}: '⒕'
    NumberFourteenFullStop,
    /// \u{2496}: '⒖'
    NumberFifteenFullStop,
    /// \u{2497}: '⒗'
    NumberSixteenFullStop,
    /// \u{2498}: '⒘'
    NumberSeventeenFullStop,
    /// \u{2499}: '⒙'
    NumberEighteenFullStop,
    /// \u{249a}: '⒚'
    NumberNineteenFullStop,
    /// \u{249b}: '⒛'
    NumberTwentyFullStop,
    /// \u{249c}: '⒜'
    ParenthesizedLatinSmallLetterA,
    /// \u{249d}: '⒝'
    ParenthesizedLatinSmallLetterB,
    /// \u{249e}: '⒞'
    ParenthesizedLatinSmallLetterC,
    /// \u{249f}: '⒟'
    ParenthesizedLatinSmallLetterD,
    /// \u{24a0}: '⒠'
    ParenthesizedLatinSmallLetterE,
    /// \u{24a1}: '⒡'
    ParenthesizedLatinSmallLetterF,
    /// \u{24a2}: '⒢'
    ParenthesizedLatinSmallLetterG,
    /// \u{24a3}: '⒣'
    ParenthesizedLatinSmallLetterH,
    /// \u{24a4}: '⒤'
    ParenthesizedLatinSmallLetterI,
    /// \u{24a5}: '⒥'
    ParenthesizedLatinSmallLetterJ,
    /// \u{24a6}: '⒦'
    ParenthesizedLatinSmallLetterK,
    /// \u{24a7}: '⒧'
    ParenthesizedLatinSmallLetterL,
    /// \u{24a8}: '⒨'
    ParenthesizedLatinSmallLetterM,
    /// \u{24a9}: '⒩'
    ParenthesizedLatinSmallLetterN,
    /// \u{24aa}: '⒪'
    ParenthesizedLatinSmallLetterO,
    /// \u{24ab}: '⒫'
    ParenthesizedLatinSmallLetterP,
    /// \u{24ac}: '⒬'
    ParenthesizedLatinSmallLetterQ,
    /// \u{24ad}: '⒭'
    ParenthesizedLatinSmallLetterR,
    /// \u{24ae}: '⒮'
    ParenthesizedLatinSmallLetterS,
    /// \u{24af}: '⒯'
    ParenthesizedLatinSmallLetterT,
    /// \u{24b0}: '⒰'
    ParenthesizedLatinSmallLetterU,
    /// \u{24b1}: '⒱'
    ParenthesizedLatinSmallLetterV,
    /// \u{24b2}: '⒲'
    ParenthesizedLatinSmallLetterW,
    /// \u{24b3}: '⒳'
    ParenthesizedLatinSmallLetterX,
    /// \u{24b4}: '⒴'
    ParenthesizedLatinSmallLetterY,
    /// \u{24b5}: '⒵'
    ParenthesizedLatinSmallLetterZ,
    /// \u{24b6}: 'Ⓐ'
    CircledLatinCapitalLetterA,
    /// \u{24b7}: 'Ⓑ'
    CircledLatinCapitalLetterB,
    /// \u{24b8}: 'Ⓒ'
    CircledLatinCapitalLetterC,
    /// \u{24b9}: 'Ⓓ'
    CircledLatinCapitalLetterD,
    /// \u{24ba}: 'Ⓔ'
    CircledLatinCapitalLetterE,
    /// \u{24bb}: 'Ⓕ'
    CircledLatinCapitalLetterF,
    /// \u{24bc}: 'Ⓖ'
    CircledLatinCapitalLetterG,
    /// \u{24bd}: 'Ⓗ'
    CircledLatinCapitalLetterH,
    /// \u{24be}: 'Ⓘ'
    CircledLatinCapitalLetterI,
    /// \u{24bf}: 'Ⓙ'
    CircledLatinCapitalLetterJ,
    /// \u{24c0}: 'Ⓚ'
    CircledLatinCapitalLetterK,
    /// \u{24c1}: 'Ⓛ'
    CircledLatinCapitalLetterL,
    /// \u{24c2}: 'Ⓜ'
    CircledLatinCapitalLetterM,
    /// \u{24c3}: 'Ⓝ'
    CircledLatinCapitalLetterN,
    /// \u{24c4}: 'Ⓞ'
    CircledLatinCapitalLetterO,
    /// \u{24c5}: 'Ⓟ'
    CircledLatinCapitalLetterP,
    /// \u{24c6}: 'Ⓠ'
    CircledLatinCapitalLetterQ,
    /// \u{24c7}: 'Ⓡ'
    CircledLatinCapitalLetterR,
    /// \u{24c8}: 'Ⓢ'
    CircledLatinCapitalLetterS,
    /// \u{24c9}: 'Ⓣ'
    CircledLatinCapitalLetterT,
    /// \u{24ca}: 'Ⓤ'
    CircledLatinCapitalLetterU,
    /// \u{24cb}: 'Ⓥ'
    CircledLatinCapitalLetterV,
    /// \u{24cc}: 'Ⓦ'
    CircledLatinCapitalLetterW,
    /// \u{24cd}: 'Ⓧ'
    CircledLatinCapitalLetterX,
    /// \u{24ce}: 'Ⓨ'
    CircledLatinCapitalLetterY,
    /// \u{24cf}: 'Ⓩ'
    CircledLatinCapitalLetterZ,
    /// \u{24d0}: 'ⓐ'
    CircledLatinSmallLetterA,
    /// \u{24d1}: 'ⓑ'
    CircledLatinSmallLetterB,
    /// \u{24d2}: 'ⓒ'
    CircledLatinSmallLetterC,
    /// \u{24d3}: 'ⓓ'
    CircledLatinSmallLetterD,
    /// \u{24d4}: 'ⓔ'
    CircledLatinSmallLetterE,
    /// \u{24d5}: 'ⓕ'
    CircledLatinSmallLetterF,
    /// \u{24d6}: 'ⓖ'
    CircledLatinSmallLetterG,
    /// \u{24d7}: 'ⓗ'
    CircledLatinSmallLetterH,
    /// \u{24d8}: 'ⓘ'
    CircledLatinSmallLetterI,
    /// \u{24d9}: 'ⓙ'
    CircledLatinSmallLetterJ,
    /// \u{24da}: 'ⓚ'
    CircledLatinSmallLetterK,
    /// \u{24db}: 'ⓛ'
    CircledLatinSmallLetterL,
    /// \u{24dc}: 'ⓜ'
    CircledLatinSmallLetterM,
    /// \u{24dd}: 'ⓝ'
    CircledLatinSmallLetterN,
    /// \u{24de}: 'ⓞ'
    CircledLatinSmallLetterO,
    /// \u{24df}: 'ⓟ'
    CircledLatinSmallLetterP,
    /// \u{24e0}: 'ⓠ'
    CircledLatinSmallLetterQ,
    /// \u{24e1}: 'ⓡ'
    CircledLatinSmallLetterR,
    /// \u{24e2}: 'ⓢ'
    CircledLatinSmallLetterS,
    /// \u{24e3}: 'ⓣ'
    CircledLatinSmallLetterT,
    /// \u{24e4}: 'ⓤ'
    CircledLatinSmallLetterU,
    /// \u{24e5}: 'ⓥ'
    CircledLatinSmallLetterV,
    /// \u{24e6}: 'ⓦ'
    CircledLatinSmallLetterW,
    /// \u{24e7}: 'ⓧ'
    CircledLatinSmallLetterX,
    /// \u{24e8}: 'ⓨ'
    CircledLatinSmallLetterY,
    /// \u{24e9}: 'ⓩ'
    CircledLatinSmallLetterZ,
    /// \u{24ea}: '⓪'
    CircledDigitZero,
    /// \u{24eb}: '⓫'
    NegativeCircledNumberEleven,
    /// \u{24ec}: '⓬'
    NegativeCircledNumberTwelve,
    /// \u{24ed}: '⓭'
    NegativeCircledNumberThirteen,
    /// \u{24ee}: '⓮'
    NegativeCircledNumberFourteen,
    /// \u{24ef}: '⓯'
    NegativeCircledNumberFifteen,
    /// \u{24f0}: '⓰'
    NegativeCircledNumberSixteen,
    /// \u{24f1}: '⓱'
    NegativeCircledNumberSeventeen,
    /// \u{24f2}: '⓲'
    NegativeCircledNumberEighteen,
    /// \u{24f3}: '⓳'
    NegativeCircledNumberNineteen,
    /// \u{24f4}: '⓴'
    NegativeCircledNumberTwenty,
    /// \u{24f5}: '⓵'
    DoubleCircledDigitOne,
    /// \u{24f6}: '⓶'
    DoubleCircledDigitTwo,
    /// \u{24f7}: '⓷'
    DoubleCircledDigitThree,
    /// \u{24f8}: '⓸'
    DoubleCircledDigitFour,
    /// \u{24f9}: '⓹'
    DoubleCircledDigitFive,
    /// \u{24fa}: '⓺'
    DoubleCircledDigitSix,
    /// \u{24fb}: '⓻'
    DoubleCircledDigitSeven,
    /// \u{24fc}: '⓼'
    DoubleCircledDigitEight,
    /// \u{24fd}: '⓽'
    DoubleCircledDigitNine,
    /// \u{24fe}: '⓾'
    DoubleCircledNumberTen,
}

impl Into<char> for EnclosedAlphanumerics {
    fn into(self) -> char {
        match self {
            EnclosedAlphanumerics::CircledDigitOne => '①',
            EnclosedAlphanumerics::CircledDigitTwo => '②',
            EnclosedAlphanumerics::CircledDigitThree => '③',
            EnclosedAlphanumerics::CircledDigitFour => '④',
            EnclosedAlphanumerics::CircledDigitFive => '⑤',
            EnclosedAlphanumerics::CircledDigitSix => '⑥',
            EnclosedAlphanumerics::CircledDigitSeven => '⑦',
            EnclosedAlphanumerics::CircledDigitEight => '⑧',
            EnclosedAlphanumerics::CircledDigitNine => '⑨',
            EnclosedAlphanumerics::CircledNumberTen => '⑩',
            EnclosedAlphanumerics::CircledNumberEleven => '⑪',
            EnclosedAlphanumerics::CircledNumberTwelve => '⑫',
            EnclosedAlphanumerics::CircledNumberThirteen => '⑬',
            EnclosedAlphanumerics::CircledNumberFourteen => '⑭',
            EnclosedAlphanumerics::CircledNumberFifteen => '⑮',
            EnclosedAlphanumerics::CircledNumberSixteen => '⑯',
            EnclosedAlphanumerics::CircledNumberSeventeen => '⑰',
            EnclosedAlphanumerics::CircledNumberEighteen => '⑱',
            EnclosedAlphanumerics::CircledNumberNineteen => '⑲',
            EnclosedAlphanumerics::CircledNumberTwenty => '⑳',
            EnclosedAlphanumerics::ParenthesizedDigitOne => '⑴',
            EnclosedAlphanumerics::ParenthesizedDigitTwo => '⑵',
            EnclosedAlphanumerics::ParenthesizedDigitThree => '⑶',
            EnclosedAlphanumerics::ParenthesizedDigitFour => '⑷',
            EnclosedAlphanumerics::ParenthesizedDigitFive => '⑸',
            EnclosedAlphanumerics::ParenthesizedDigitSix => '⑹',
            EnclosedAlphanumerics::ParenthesizedDigitSeven => '⑺',
            EnclosedAlphanumerics::ParenthesizedDigitEight => '⑻',
            EnclosedAlphanumerics::ParenthesizedDigitNine => '⑼',
            EnclosedAlphanumerics::ParenthesizedNumberTen => '⑽',
            EnclosedAlphanumerics::ParenthesizedNumberEleven => '⑾',
            EnclosedAlphanumerics::ParenthesizedNumberTwelve => '⑿',
            EnclosedAlphanumerics::ParenthesizedNumberThirteen => '⒀',
            EnclosedAlphanumerics::ParenthesizedNumberFourteen => '⒁',
            EnclosedAlphanumerics::ParenthesizedNumberFifteen => '⒂',
            EnclosedAlphanumerics::ParenthesizedNumberSixteen => '⒃',
            EnclosedAlphanumerics::ParenthesizedNumberSeventeen => '⒄',
            EnclosedAlphanumerics::ParenthesizedNumberEighteen => '⒅',
            EnclosedAlphanumerics::ParenthesizedNumberNineteen => '⒆',
            EnclosedAlphanumerics::ParenthesizedNumberTwenty => '⒇',
            EnclosedAlphanumerics::DigitOneFullStop => '⒈',
            EnclosedAlphanumerics::DigitTwoFullStop => '⒉',
            EnclosedAlphanumerics::DigitThreeFullStop => '⒊',
            EnclosedAlphanumerics::DigitFourFullStop => '⒋',
            EnclosedAlphanumerics::DigitFiveFullStop => '⒌',
            EnclosedAlphanumerics::DigitSixFullStop => '⒍',
            EnclosedAlphanumerics::DigitSevenFullStop => '⒎',
            EnclosedAlphanumerics::DigitEightFullStop => '⒏',
            EnclosedAlphanumerics::DigitNineFullStop => '⒐',
            EnclosedAlphanumerics::NumberTenFullStop => '⒑',
            EnclosedAlphanumerics::NumberElevenFullStop => '⒒',
            EnclosedAlphanumerics::NumberTwelveFullStop => '⒓',
            EnclosedAlphanumerics::NumberThirteenFullStop => '⒔',
            EnclosedAlphanumerics::NumberFourteenFullStop => '⒕',
            EnclosedAlphanumerics::NumberFifteenFullStop => '⒖',
            EnclosedAlphanumerics::NumberSixteenFullStop => '⒗',
            EnclosedAlphanumerics::NumberSeventeenFullStop => '⒘',
            EnclosedAlphanumerics::NumberEighteenFullStop => '⒙',
            EnclosedAlphanumerics::NumberNineteenFullStop => '⒚',
            EnclosedAlphanumerics::NumberTwentyFullStop => '⒛',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterA => '⒜',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterB => '⒝',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterC => '⒞',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterD => '⒟',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterE => '⒠',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterF => '⒡',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterG => '⒢',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterH => '⒣',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterI => '⒤',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterJ => '⒥',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterK => '⒦',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterL => '⒧',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterM => '⒨',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterN => '⒩',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterO => '⒪',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterP => '⒫',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterQ => '⒬',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterR => '⒭',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterS => '⒮',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterT => '⒯',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterU => '⒰',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterV => '⒱',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterW => '⒲',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterX => '⒳',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterY => '⒴',
            EnclosedAlphanumerics::ParenthesizedLatinSmallLetterZ => '⒵',
            EnclosedAlphanumerics::CircledLatinCapitalLetterA => 'Ⓐ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterB => 'Ⓑ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterC => 'Ⓒ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterD => 'Ⓓ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterE => 'Ⓔ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterF => 'Ⓕ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterG => 'Ⓖ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterH => 'Ⓗ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterI => 'Ⓘ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterJ => 'Ⓙ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterK => 'Ⓚ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterL => 'Ⓛ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterM => 'Ⓜ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterN => 'Ⓝ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterO => 'Ⓞ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterP => 'Ⓟ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterQ => 'Ⓠ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterR => 'Ⓡ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterS => 'Ⓢ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterT => 'Ⓣ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterU => 'Ⓤ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterV => 'Ⓥ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterW => 'Ⓦ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterX => 'Ⓧ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterY => 'Ⓨ',
            EnclosedAlphanumerics::CircledLatinCapitalLetterZ => 'Ⓩ',
            EnclosedAlphanumerics::CircledLatinSmallLetterA => 'ⓐ',
            EnclosedAlphanumerics::CircledLatinSmallLetterB => 'ⓑ',
            EnclosedAlphanumerics::CircledLatinSmallLetterC => 'ⓒ',
            EnclosedAlphanumerics::CircledLatinSmallLetterD => 'ⓓ',
            EnclosedAlphanumerics::CircledLatinSmallLetterE => 'ⓔ',
            EnclosedAlphanumerics::CircledLatinSmallLetterF => 'ⓕ',
            EnclosedAlphanumerics::CircledLatinSmallLetterG => 'ⓖ',
            EnclosedAlphanumerics::CircledLatinSmallLetterH => 'ⓗ',
            EnclosedAlphanumerics::CircledLatinSmallLetterI => 'ⓘ',
            EnclosedAlphanumerics::CircledLatinSmallLetterJ => 'ⓙ',
            EnclosedAlphanumerics::CircledLatinSmallLetterK => 'ⓚ',
            EnclosedAlphanumerics::CircledLatinSmallLetterL => 'ⓛ',
            EnclosedAlphanumerics::CircledLatinSmallLetterM => 'ⓜ',
            EnclosedAlphanumerics::CircledLatinSmallLetterN => 'ⓝ',
            EnclosedAlphanumerics::CircledLatinSmallLetterO => 'ⓞ',
            EnclosedAlphanumerics::CircledLatinSmallLetterP => 'ⓟ',
            EnclosedAlphanumerics::CircledLatinSmallLetterQ => 'ⓠ',
            EnclosedAlphanumerics::CircledLatinSmallLetterR => 'ⓡ',
            EnclosedAlphanumerics::CircledLatinSmallLetterS => 'ⓢ',
            EnclosedAlphanumerics::CircledLatinSmallLetterT => 'ⓣ',
            EnclosedAlphanumerics::CircledLatinSmallLetterU => 'ⓤ',
            EnclosedAlphanumerics::CircledLatinSmallLetterV => 'ⓥ',
            EnclosedAlphanumerics::CircledLatinSmallLetterW => 'ⓦ',
            EnclosedAlphanumerics::CircledLatinSmallLetterX => 'ⓧ',
            EnclosedAlphanumerics::CircledLatinSmallLetterY => 'ⓨ',
            EnclosedAlphanumerics::CircledLatinSmallLetterZ => 'ⓩ',
            EnclosedAlphanumerics::CircledDigitZero => '⓪',
            EnclosedAlphanumerics::NegativeCircledNumberEleven => '⓫',
            EnclosedAlphanumerics::NegativeCircledNumberTwelve => '⓬',
            EnclosedAlphanumerics::NegativeCircledNumberThirteen => '⓭',
            EnclosedAlphanumerics::NegativeCircledNumberFourteen => '⓮',
            EnclosedAlphanumerics::NegativeCircledNumberFifteen => '⓯',
            EnclosedAlphanumerics::NegativeCircledNumberSixteen => '⓰',
            EnclosedAlphanumerics::NegativeCircledNumberSeventeen => '⓱',
            EnclosedAlphanumerics::NegativeCircledNumberEighteen => '⓲',
            EnclosedAlphanumerics::NegativeCircledNumberNineteen => '⓳',
            EnclosedAlphanumerics::NegativeCircledNumberTwenty => '⓴',
            EnclosedAlphanumerics::DoubleCircledDigitOne => '⓵',
            EnclosedAlphanumerics::DoubleCircledDigitTwo => '⓶',
            EnclosedAlphanumerics::DoubleCircledDigitThree => '⓷',
            EnclosedAlphanumerics::DoubleCircledDigitFour => '⓸',
            EnclosedAlphanumerics::DoubleCircledDigitFive => '⓹',
            EnclosedAlphanumerics::DoubleCircledDigitSix => '⓺',
            EnclosedAlphanumerics::DoubleCircledDigitSeven => '⓻',
            EnclosedAlphanumerics::DoubleCircledDigitEight => '⓼',
            EnclosedAlphanumerics::DoubleCircledDigitNine => '⓽',
            EnclosedAlphanumerics::DoubleCircledNumberTen => '⓾',
        }
    }
}

impl std::convert::TryFrom<char> for EnclosedAlphanumerics {
    type Error = ();
    fn try_from(c: char) -> Result<Self, Self::Error> {
        match c {
            '①' => Ok(EnclosedAlphanumerics::CircledDigitOne),
            '②' => Ok(EnclosedAlphanumerics::CircledDigitTwo),
            '③' => Ok(EnclosedAlphanumerics::CircledDigitThree),
            '④' => Ok(EnclosedAlphanumerics::CircledDigitFour),
            '⑤' => Ok(EnclosedAlphanumerics::CircledDigitFive),
            '⑥' => Ok(EnclosedAlphanumerics::CircledDigitSix),
            '⑦' => Ok(EnclosedAlphanumerics::CircledDigitSeven),
            '⑧' => Ok(EnclosedAlphanumerics::CircledDigitEight),
            '⑨' => Ok(EnclosedAlphanumerics::CircledDigitNine),
            '⑩' => Ok(EnclosedAlphanumerics::CircledNumberTen),
            '⑪' => Ok(EnclosedAlphanumerics::CircledNumberEleven),
            '⑫' => Ok(EnclosedAlphanumerics::CircledNumberTwelve),
            '⑬' => Ok(EnclosedAlphanumerics::CircledNumberThirteen),
            '⑭' => Ok(EnclosedAlphanumerics::CircledNumberFourteen),
            '⑮' => Ok(EnclosedAlphanumerics::CircledNumberFifteen),
            '⑯' => Ok(EnclosedAlphanumerics::CircledNumberSixteen),
            '⑰' => Ok(EnclosedAlphanumerics::CircledNumberSeventeen),
            '⑱' => Ok(EnclosedAlphanumerics::CircledNumberEighteen),
            '⑲' => Ok(EnclosedAlphanumerics::CircledNumberNineteen),
            '⑳' => Ok(EnclosedAlphanumerics::CircledNumberTwenty),
            '⑴' => Ok(EnclosedAlphanumerics::ParenthesizedDigitOne),
            '⑵' => Ok(EnclosedAlphanumerics::ParenthesizedDigitTwo),
            '⑶' => Ok(EnclosedAlphanumerics::ParenthesizedDigitThree),
            '⑷' => Ok(EnclosedAlphanumerics::ParenthesizedDigitFour),
            '⑸' => Ok(EnclosedAlphanumerics::ParenthesizedDigitFive),
            '⑹' => Ok(EnclosedAlphanumerics::ParenthesizedDigitSix),
            '⑺' => Ok(EnclosedAlphanumerics::ParenthesizedDigitSeven),
            '⑻' => Ok(EnclosedAlphanumerics::ParenthesizedDigitEight),
            '⑼' => Ok(EnclosedAlphanumerics::ParenthesizedDigitNine),
            '⑽' => Ok(EnclosedAlphanumerics::ParenthesizedNumberTen),
            '⑾' => Ok(EnclosedAlphanumerics::ParenthesizedNumberEleven),
            '⑿' => Ok(EnclosedAlphanumerics::ParenthesizedNumberTwelve),
            '⒀' => Ok(EnclosedAlphanumerics::ParenthesizedNumberThirteen),
            '⒁' => Ok(EnclosedAlphanumerics::ParenthesizedNumberFourteen),
            '⒂' => Ok(EnclosedAlphanumerics::ParenthesizedNumberFifteen),
            '⒃' => Ok(EnclosedAlphanumerics::ParenthesizedNumberSixteen),
            '⒄' => Ok(EnclosedAlphanumerics::ParenthesizedNumberSeventeen),
            '⒅' => Ok(EnclosedAlphanumerics::ParenthesizedNumberEighteen),
            '⒆' => Ok(EnclosedAlphanumerics::ParenthesizedNumberNineteen),
            '⒇' => Ok(EnclosedAlphanumerics::ParenthesizedNumberTwenty),
            '⒈' => Ok(EnclosedAlphanumerics::DigitOneFullStop),
            '⒉' => Ok(EnclosedAlphanumerics::DigitTwoFullStop),
            '⒊' => Ok(EnclosedAlphanumerics::DigitThreeFullStop),
            '⒋' => Ok(EnclosedAlphanumerics::DigitFourFullStop),
            '⒌' => Ok(EnclosedAlphanumerics::DigitFiveFullStop),
            '⒍' => Ok(EnclosedAlphanumerics::DigitSixFullStop),
            '⒎' => Ok(EnclosedAlphanumerics::DigitSevenFullStop),
            '⒏' => Ok(EnclosedAlphanumerics::DigitEightFullStop),
            '⒐' => Ok(EnclosedAlphanumerics::DigitNineFullStop),
            '⒑' => Ok(EnclosedAlphanumerics::NumberTenFullStop),
            '⒒' => Ok(EnclosedAlphanumerics::NumberElevenFullStop),
            '⒓' => Ok(EnclosedAlphanumerics::NumberTwelveFullStop),
            '⒔' => Ok(EnclosedAlphanumerics::NumberThirteenFullStop),
            '⒕' => Ok(EnclosedAlphanumerics::NumberFourteenFullStop),
            '⒖' => Ok(EnclosedAlphanumerics::NumberFifteenFullStop),
            '⒗' => Ok(EnclosedAlphanumerics::NumberSixteenFullStop),
            '⒘' => Ok(EnclosedAlphanumerics::NumberSeventeenFullStop),
            '⒙' => Ok(EnclosedAlphanumerics::NumberEighteenFullStop),
            '⒚' => Ok(EnclosedAlphanumerics::NumberNineteenFullStop),
            '⒛' => Ok(EnclosedAlphanumerics::NumberTwentyFullStop),
            '⒜' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterA),
            '⒝' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterB),
            '⒞' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterC),
            '⒟' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterD),
            '⒠' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterE),
            '⒡' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterF),
            '⒢' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterG),
            '⒣' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterH),
            '⒤' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterI),
            '⒥' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterJ),
            '⒦' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterK),
            '⒧' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterL),
            '⒨' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterM),
            '⒩' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterN),
            '⒪' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterO),
            '⒫' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterP),
            '⒬' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterQ),
            '⒭' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterR),
            '⒮' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterS),
            '⒯' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterT),
            '⒰' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterU),
            '⒱' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterV),
            '⒲' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterW),
            '⒳' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterX),
            '⒴' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterY),
            '⒵' => Ok(EnclosedAlphanumerics::ParenthesizedLatinSmallLetterZ),
            'Ⓐ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterA),
            'Ⓑ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterB),
            'Ⓒ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterC),
            'Ⓓ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterD),
            'Ⓔ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterE),
            'Ⓕ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterF),
            'Ⓖ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterG),
            'Ⓗ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterH),
            'Ⓘ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterI),
            'Ⓙ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterJ),
            'Ⓚ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterK),
            'Ⓛ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterL),
            'Ⓜ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterM),
            'Ⓝ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterN),
            'Ⓞ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterO),
            'Ⓟ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterP),
            'Ⓠ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterQ),
            'Ⓡ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterR),
            'Ⓢ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterS),
            'Ⓣ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterT),
            'Ⓤ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterU),
            'Ⓥ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterV),
            'Ⓦ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterW),
            'Ⓧ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterX),
            'Ⓨ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterY),
            'Ⓩ' => Ok(EnclosedAlphanumerics::CircledLatinCapitalLetterZ),
            'ⓐ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterA),
            'ⓑ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterB),
            'ⓒ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterC),
            'ⓓ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterD),
            'ⓔ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterE),
            'ⓕ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterF),
            'ⓖ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterG),
            'ⓗ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterH),
            'ⓘ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterI),
            'ⓙ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterJ),
            'ⓚ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterK),
            'ⓛ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterL),
            'ⓜ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterM),
            'ⓝ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterN),
            'ⓞ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterO),
            'ⓟ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterP),
            'ⓠ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterQ),
            'ⓡ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterR),
            'ⓢ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterS),
            'ⓣ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterT),
            'ⓤ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterU),
            'ⓥ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterV),
            'ⓦ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterW),
            'ⓧ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterX),
            'ⓨ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterY),
            'ⓩ' => Ok(EnclosedAlphanumerics::CircledLatinSmallLetterZ),
            '⓪' => Ok(EnclosedAlphanumerics::CircledDigitZero),
            '⓫' => Ok(EnclosedAlphanumerics::NegativeCircledNumberEleven),
            '⓬' => Ok(EnclosedAlphanumerics::NegativeCircledNumberTwelve),
            '⓭' => Ok(EnclosedAlphanumerics::NegativeCircledNumberThirteen),
            '⓮' => Ok(EnclosedAlphanumerics::NegativeCircledNumberFourteen),
            '⓯' => Ok(EnclosedAlphanumerics::NegativeCircledNumberFifteen),
            '⓰' => Ok(EnclosedAlphanumerics::NegativeCircledNumberSixteen),
            '⓱' => Ok(EnclosedAlphanumerics::NegativeCircledNumberSeventeen),
            '⓲' => Ok(EnclosedAlphanumerics::NegativeCircledNumberEighteen),
            '⓳' => Ok(EnclosedAlphanumerics::NegativeCircledNumberNineteen),
            '⓴' => Ok(EnclosedAlphanumerics::NegativeCircledNumberTwenty),
            '⓵' => Ok(EnclosedAlphanumerics::DoubleCircledDigitOne),
            '⓶' => Ok(EnclosedAlphanumerics::DoubleCircledDigitTwo),
            '⓷' => Ok(EnclosedAlphanumerics::DoubleCircledDigitThree),
            '⓸' => Ok(EnclosedAlphanumerics::DoubleCircledDigitFour),
            '⓹' => Ok(EnclosedAlphanumerics::DoubleCircledDigitFive),
            '⓺' => Ok(EnclosedAlphanumerics::DoubleCircledDigitSix),
            '⓻' => Ok(EnclosedAlphanumerics::DoubleCircledDigitSeven),
            '⓼' => Ok(EnclosedAlphanumerics::DoubleCircledDigitEight),
            '⓽' => Ok(EnclosedAlphanumerics::DoubleCircledDigitNine),
            '⓾' => Ok(EnclosedAlphanumerics::DoubleCircledNumberTen),
            _ => Err(()),
        }
    }
}

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

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