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

/// An enum to represent all characters in the Arrows block.
#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Arrows {
    /// \u{2190}: '←'
    LeftwardsArrow,
    /// \u{2191}: '↑'
    UpwardsArrow,
    /// \u{2192}: '→'
    RightwardsArrow,
    /// \u{2193}: '↓'
    DownwardsArrow,
    /// \u{2194}: '↔'
    LeftRightArrow,
    /// \u{2195}: '↕'
    UpDownArrow,
    /// \u{2196}: '↖'
    NorthWestArrow,
    /// \u{2197}: '↗'
    NorthEastArrow,
    /// \u{2198}: '↘'
    SouthEastArrow,
    /// \u{2199}: '↙'
    SouthWestArrow,
    /// \u{219a}: '↚'
    LeftwardsArrowWithStroke,
    /// \u{219b}: '↛'
    RightwardsArrowWithStroke,
    /// \u{219c}: '↜'
    LeftwardsWaveArrow,
    /// \u{219d}: '↝'
    RightwardsWaveArrow,
    /// \u{219e}: '↞'
    LeftwardsTwoHeadedArrow,
    /// \u{219f}: '↟'
    UpwardsTwoHeadedArrow,
    /// \u{21a0}: '↠'
    RightwardsTwoHeadedArrow,
    /// \u{21a1}: '↡'
    DownwardsTwoHeadedArrow,
    /// \u{21a2}: '↢'
    LeftwardsArrowWithTail,
    /// \u{21a3}: '↣'
    RightwardsArrowWithTail,
    /// \u{21a4}: '↤'
    LeftwardsArrowFromBar,
    /// \u{21a5}: '↥'
    UpwardsArrowFromBar,
    /// \u{21a6}: '↦'
    RightwardsArrowFromBar,
    /// \u{21a7}: '↧'
    DownwardsArrowFromBar,
    /// \u{21a8}: '↨'
    UpDownArrowWithBase,
    /// \u{21a9}: '↩'
    LeftwardsArrowWithHook,
    /// \u{21aa}: '↪'
    RightwardsArrowWithHook,
    /// \u{21ab}: '↫'
    LeftwardsArrowWithLoop,
    /// \u{21ac}: '↬'
    RightwardsArrowWithLoop,
    /// \u{21ad}: '↭'
    LeftRightWaveArrow,
    /// \u{21ae}: '↮'
    LeftRightArrowWithStroke,
    /// \u{21af}: '↯'
    DownwardsZigzagArrow,
    /// \u{21b0}: '↰'
    UpwardsArrowWithTipLeftwards,
    /// \u{21b1}: '↱'
    UpwardsArrowWithTipRightwards,
    /// \u{21b2}: '↲'
    DownwardsArrowWithTipLeftwards,
    /// \u{21b3}: '↳'
    DownwardsArrowWithTipRightwards,
    /// \u{21b4}: '↴'
    RightwardsArrowWithCornerDownwards,
    /// \u{21b5}: '↵'
    DownwardsArrowWithCornerLeftwards,
    /// \u{21b6}: '↶'
    AnticlockwiseTopSemicircleArrow,
    /// \u{21b7}: '↷'
    ClockwiseTopSemicircleArrow,
    /// \u{21b8}: '↸'
    NorthWestArrowToLongBar,
    /// \u{21b9}: '↹'
    LeftwardsArrowToBarOverRightwardsArrowToBar,
    /// \u{21ba}: '↺'
    AnticlockwiseOpenCircleArrow,
    /// \u{21bb}: '↻'
    ClockwiseOpenCircleArrow,
    /// \u{21bc}: '↼'
    LeftwardsHarpoonWithBarbUpwards,
    /// \u{21bd}: '↽'
    LeftwardsHarpoonWithBarbDownwards,
    /// \u{21be}: '↾'
    UpwardsHarpoonWithBarbRightwards,
    /// \u{21bf}: '↿'
    UpwardsHarpoonWithBarbLeftwards,
    /// \u{21c0}: '⇀'
    RightwardsHarpoonWithBarbUpwards,
    /// \u{21c1}: '⇁'
    RightwardsHarpoonWithBarbDownwards,
    /// \u{21c2}: '⇂'
    DownwardsHarpoonWithBarbRightwards,
    /// \u{21c3}: '⇃'
    DownwardsHarpoonWithBarbLeftwards,
    /// \u{21c4}: '⇄'
    RightwardsArrowOverLeftwardsArrow,
    /// \u{21c5}: '⇅'
    UpwardsArrowLeftwardsOfDownwardsArrow,
    /// \u{21c6}: '⇆'
    LeftwardsArrowOverRightwardsArrow,
    /// \u{21c7}: '⇇'
    LeftwardsPaired,
    /// \u{21c8}: '⇈'
    UpwardsPaired,
    /// \u{21c9}: '⇉'
    RightwardsPaired,
    /// \u{21ca}: '⇊'
    DownwardsPaired,
    /// \u{21cb}: '⇋'
    LeftwardsHarpoonOverRightwardsHarpoon,
    /// \u{21cc}: '⇌'
    RightwardsHarpoonOverLeftwardsHarpoon,
    /// \u{21cd}: '⇍'
    LeftwardsDoubleArrowWithStroke,
    /// \u{21ce}: '⇎'
    LeftRightDoubleArrowWithStroke,
    /// \u{21cf}: '⇏'
    RightwardsDoubleArrowWithStroke,
    /// \u{21d0}: '⇐'
    LeftwardsDoubleArrow,
    /// \u{21d1}: '⇑'
    UpwardsDoubleArrow,
    /// \u{21d2}: '⇒'
    RightwardsDoubleArrow,
    /// \u{21d3}: '⇓'
    DownwardsDoubleArrow,
    /// \u{21d4}: '⇔'
    LeftRightDoubleArrow,
    /// \u{21d5}: '⇕'
    UpDownDoubleArrow,
    /// \u{21d6}: '⇖'
    NorthWestDoubleArrow,
    /// \u{21d7}: '⇗'
    NorthEastDoubleArrow,
    /// \u{21d8}: '⇘'
    SouthEastDoubleArrow,
    /// \u{21d9}: '⇙'
    SouthWestDoubleArrow,
    /// \u{21da}: '⇚'
    LeftwardsTripleArrow,
    /// \u{21db}: '⇛'
    RightwardsTripleArrow,
    /// \u{21dc}: '⇜'
    LeftwardsSquiggleArrow,
    /// \u{21dd}: '⇝'
    RightwardsSquiggleArrow,
    /// \u{21de}: '⇞'
    UpwardsArrowWithDoubleStroke,
    /// \u{21df}: '⇟'
    DownwardsArrowWithDoubleStroke,
    /// \u{21e0}: '⇠'
    LeftwardsDashedArrow,
    /// \u{21e1}: '⇡'
    UpwardsDashedArrow,
    /// \u{21e2}: '⇢'
    RightwardsDashedArrow,
    /// \u{21e3}: '⇣'
    DownwardsDashedArrow,
    /// \u{21e4}: '⇤'
    LeftwardsArrowToBar,
    /// \u{21e5}: '⇥'
    RightwardsArrowToBar,
    /// \u{21e6}: '⇦'
    LeftwardsWhiteArrow,
    /// \u{21e7}: '⇧'
    UpwardsWhiteArrow,
    /// \u{21e8}: '⇨'
    RightwardsWhiteArrow,
    /// \u{21e9}: '⇩'
    DownwardsWhiteArrow,
    /// \u{21ea}: '⇪'
    UpwardsWhiteArrowFromBar,
    /// \u{21eb}: '⇫'
    UpwardsWhiteArrowOnPedestal,
    /// \u{21ec}: '⇬'
    UpwardsWhiteArrowOnPedestalWithHorizontalBar,
    /// \u{21ed}: '⇭'
    UpwardsWhiteArrowOnPedestalWithVerticalBar,
    /// \u{21ee}: '⇮'
    UpwardsWhiteDoubleArrow,
    /// \u{21ef}: '⇯'
    UpwardsWhiteDoubleArrowOnPedestal,
    /// \u{21f0}: '⇰'
    RightwardsWhiteArrowFromWall,
    /// \u{21f1}: '⇱'
    NorthWestArrowToCorner,
    /// \u{21f2}: '⇲'
    SouthEastArrowToCorner,
    /// \u{21f3}: '⇳'
    UpDownWhiteArrow,
    /// \u{21f4}: '⇴'
    RightArrowWithSmallCircle,
    /// \u{21f5}: '⇵'
    DownwardsArrowLeftwardsOfUpwardsArrow,
    /// \u{21f6}: '⇶'
    ThreeRightwards,
    /// \u{21f7}: '⇷'
    LeftwardsArrowWithVerticalStroke,
    /// \u{21f8}: '⇸'
    RightwardsArrowWithVerticalStroke,
    /// \u{21f9}: '⇹'
    LeftRightArrowWithVerticalStroke,
    /// \u{21fa}: '⇺'
    LeftwardsArrowWithDoubleVerticalStroke,
    /// \u{21fb}: '⇻'
    RightwardsArrowWithDoubleVerticalStroke,
    /// \u{21fc}: '⇼'
    LeftRightArrowWithDoubleVerticalStroke,
    /// \u{21fd}: '⇽'
    LeftwardsOpenDashHeadedArrow,
    /// \u{21fe}: '⇾'
    RightwardsOpenDashHeadedArrow,
}

impl Into<char> for Arrows {
    fn into(self) -> char {
        match self {
            Arrows::LeftwardsArrow => '←',
            Arrows::UpwardsArrow => '↑',
            Arrows::RightwardsArrow => '→',
            Arrows::DownwardsArrow => '↓',
            Arrows::LeftRightArrow => '↔',
            Arrows::UpDownArrow => '↕',
            Arrows::NorthWestArrow => '↖',
            Arrows::NorthEastArrow => '↗',
            Arrows::SouthEastArrow => '↘',
            Arrows::SouthWestArrow => '↙',
            Arrows::LeftwardsArrowWithStroke => '↚',
            Arrows::RightwardsArrowWithStroke => '↛',
            Arrows::LeftwardsWaveArrow => '↜',
            Arrows::RightwardsWaveArrow => '↝',
            Arrows::LeftwardsTwoHeadedArrow => '↞',
            Arrows::UpwardsTwoHeadedArrow => '↟',
            Arrows::RightwardsTwoHeadedArrow => '↠',
            Arrows::DownwardsTwoHeadedArrow => '↡',
            Arrows::LeftwardsArrowWithTail => '↢',
            Arrows::RightwardsArrowWithTail => '↣',
            Arrows::LeftwardsArrowFromBar => '↤',
            Arrows::UpwardsArrowFromBar => '↥',
            Arrows::RightwardsArrowFromBar => '↦',
            Arrows::DownwardsArrowFromBar => '↧',
            Arrows::UpDownArrowWithBase => '↨',
            Arrows::LeftwardsArrowWithHook => '↩',
            Arrows::RightwardsArrowWithHook => '↪',
            Arrows::LeftwardsArrowWithLoop => '↫',
            Arrows::RightwardsArrowWithLoop => '↬',
            Arrows::LeftRightWaveArrow => '↭',
            Arrows::LeftRightArrowWithStroke => '↮',
            Arrows::DownwardsZigzagArrow => '↯',
            Arrows::UpwardsArrowWithTipLeftwards => '↰',
            Arrows::UpwardsArrowWithTipRightwards => '↱',
            Arrows::DownwardsArrowWithTipLeftwards => '↲',
            Arrows::DownwardsArrowWithTipRightwards => '↳',
            Arrows::RightwardsArrowWithCornerDownwards => '↴',
            Arrows::DownwardsArrowWithCornerLeftwards => '↵',
            Arrows::AnticlockwiseTopSemicircleArrow => '↶',
            Arrows::ClockwiseTopSemicircleArrow => '↷',
            Arrows::NorthWestArrowToLongBar => '↸',
            Arrows::LeftwardsArrowToBarOverRightwardsArrowToBar => '↹',
            Arrows::AnticlockwiseOpenCircleArrow => '↺',
            Arrows::ClockwiseOpenCircleArrow => '↻',
            Arrows::LeftwardsHarpoonWithBarbUpwards => '↼',
            Arrows::LeftwardsHarpoonWithBarbDownwards => '↽',
            Arrows::UpwardsHarpoonWithBarbRightwards => '↾',
            Arrows::UpwardsHarpoonWithBarbLeftwards => '↿',
            Arrows::RightwardsHarpoonWithBarbUpwards => '⇀',
            Arrows::RightwardsHarpoonWithBarbDownwards => '⇁',
            Arrows::DownwardsHarpoonWithBarbRightwards => '⇂',
            Arrows::DownwardsHarpoonWithBarbLeftwards => '⇃',
            Arrows::RightwardsArrowOverLeftwardsArrow => '⇄',
            Arrows::UpwardsArrowLeftwardsOfDownwardsArrow => '⇅',
            Arrows::LeftwardsArrowOverRightwardsArrow => '⇆',
            Arrows::LeftwardsPaired => '⇇',
            Arrows::UpwardsPaired => '⇈',
            Arrows::RightwardsPaired => '⇉',
            Arrows::DownwardsPaired => '⇊',
            Arrows::LeftwardsHarpoonOverRightwardsHarpoon => '⇋',
            Arrows::RightwardsHarpoonOverLeftwardsHarpoon => '⇌',
            Arrows::LeftwardsDoubleArrowWithStroke => '⇍',
            Arrows::LeftRightDoubleArrowWithStroke => '⇎',
            Arrows::RightwardsDoubleArrowWithStroke => '⇏',
            Arrows::LeftwardsDoubleArrow => '⇐',
            Arrows::UpwardsDoubleArrow => '⇑',
            Arrows::RightwardsDoubleArrow => '⇒',
            Arrows::DownwardsDoubleArrow => '⇓',
            Arrows::LeftRightDoubleArrow => '⇔',
            Arrows::UpDownDoubleArrow => '⇕',
            Arrows::NorthWestDoubleArrow => '⇖',
            Arrows::NorthEastDoubleArrow => '⇗',
            Arrows::SouthEastDoubleArrow => '⇘',
            Arrows::SouthWestDoubleArrow => '⇙',
            Arrows::LeftwardsTripleArrow => '⇚',
            Arrows::RightwardsTripleArrow => '⇛',
            Arrows::LeftwardsSquiggleArrow => '⇜',
            Arrows::RightwardsSquiggleArrow => '⇝',
            Arrows::UpwardsArrowWithDoubleStroke => '⇞',
            Arrows::DownwardsArrowWithDoubleStroke => '⇟',
            Arrows::LeftwardsDashedArrow => '⇠',
            Arrows::UpwardsDashedArrow => '⇡',
            Arrows::RightwardsDashedArrow => '⇢',
            Arrows::DownwardsDashedArrow => '⇣',
            Arrows::LeftwardsArrowToBar => '⇤',
            Arrows::RightwardsArrowToBar => '⇥',
            Arrows::LeftwardsWhiteArrow => '⇦',
            Arrows::UpwardsWhiteArrow => '⇧',
            Arrows::RightwardsWhiteArrow => '⇨',
            Arrows::DownwardsWhiteArrow => '⇩',
            Arrows::UpwardsWhiteArrowFromBar => '⇪',
            Arrows::UpwardsWhiteArrowOnPedestal => '⇫',
            Arrows::UpwardsWhiteArrowOnPedestalWithHorizontalBar => '⇬',
            Arrows::UpwardsWhiteArrowOnPedestalWithVerticalBar => '⇭',
            Arrows::UpwardsWhiteDoubleArrow => '⇮',
            Arrows::UpwardsWhiteDoubleArrowOnPedestal => '⇯',
            Arrows::RightwardsWhiteArrowFromWall => '⇰',
            Arrows::NorthWestArrowToCorner => '⇱',
            Arrows::SouthEastArrowToCorner => '⇲',
            Arrows::UpDownWhiteArrow => '⇳',
            Arrows::RightArrowWithSmallCircle => '⇴',
            Arrows::DownwardsArrowLeftwardsOfUpwardsArrow => '⇵',
            Arrows::ThreeRightwards => '⇶',
            Arrows::LeftwardsArrowWithVerticalStroke => '⇷',
            Arrows::RightwardsArrowWithVerticalStroke => '⇸',
            Arrows::LeftRightArrowWithVerticalStroke => '⇹',
            Arrows::LeftwardsArrowWithDoubleVerticalStroke => '⇺',
            Arrows::RightwardsArrowWithDoubleVerticalStroke => '⇻',
            Arrows::LeftRightArrowWithDoubleVerticalStroke => '⇼',
            Arrows::LeftwardsOpenDashHeadedArrow => '⇽',
            Arrows::RightwardsOpenDashHeadedArrow => '⇾',
        }
    }
}

impl std::convert::TryFrom<char> for Arrows {
    type Error = ();
    fn try_from(c: char) -> Result<Self, Self::Error> {
        match c {
            '←' => Ok(Arrows::LeftwardsArrow),
            '↑' => Ok(Arrows::UpwardsArrow),
            '→' => Ok(Arrows::RightwardsArrow),
            '↓' => Ok(Arrows::DownwardsArrow),
            '↔' => Ok(Arrows::LeftRightArrow),
            '↕' => Ok(Arrows::UpDownArrow),
            '↖' => Ok(Arrows::NorthWestArrow),
            '↗' => Ok(Arrows::NorthEastArrow),
            '↘' => Ok(Arrows::SouthEastArrow),
            '↙' => Ok(Arrows::SouthWestArrow),
            '↚' => Ok(Arrows::LeftwardsArrowWithStroke),
            '↛' => Ok(Arrows::RightwardsArrowWithStroke),
            '↜' => Ok(Arrows::LeftwardsWaveArrow),
            '↝' => Ok(Arrows::RightwardsWaveArrow),
            '↞' => Ok(Arrows::LeftwardsTwoHeadedArrow),
            '↟' => Ok(Arrows::UpwardsTwoHeadedArrow),
            '↠' => Ok(Arrows::RightwardsTwoHeadedArrow),
            '↡' => Ok(Arrows::DownwardsTwoHeadedArrow),
            '↢' => Ok(Arrows::LeftwardsArrowWithTail),
            '↣' => Ok(Arrows::RightwardsArrowWithTail),
            '↤' => Ok(Arrows::LeftwardsArrowFromBar),
            '↥' => Ok(Arrows::UpwardsArrowFromBar),
            '↦' => Ok(Arrows::RightwardsArrowFromBar),
            '↧' => Ok(Arrows::DownwardsArrowFromBar),
            '↨' => Ok(Arrows::UpDownArrowWithBase),
            '↩' => Ok(Arrows::LeftwardsArrowWithHook),
            '↪' => Ok(Arrows::RightwardsArrowWithHook),
            '↫' => Ok(Arrows::LeftwardsArrowWithLoop),
            '↬' => Ok(Arrows::RightwardsArrowWithLoop),
            '↭' => Ok(Arrows::LeftRightWaveArrow),
            '↮' => Ok(Arrows::LeftRightArrowWithStroke),
            '↯' => Ok(Arrows::DownwardsZigzagArrow),
            '↰' => Ok(Arrows::UpwardsArrowWithTipLeftwards),
            '↱' => Ok(Arrows::UpwardsArrowWithTipRightwards),
            '↲' => Ok(Arrows::DownwardsArrowWithTipLeftwards),
            '↳' => Ok(Arrows::DownwardsArrowWithTipRightwards),
            '↴' => Ok(Arrows::RightwardsArrowWithCornerDownwards),
            '↵' => Ok(Arrows::DownwardsArrowWithCornerLeftwards),
            '↶' => Ok(Arrows::AnticlockwiseTopSemicircleArrow),
            '↷' => Ok(Arrows::ClockwiseTopSemicircleArrow),
            '↸' => Ok(Arrows::NorthWestArrowToLongBar),
            '↹' => Ok(Arrows::LeftwardsArrowToBarOverRightwardsArrowToBar),
            '↺' => Ok(Arrows::AnticlockwiseOpenCircleArrow),
            '↻' => Ok(Arrows::ClockwiseOpenCircleArrow),
            '↼' => Ok(Arrows::LeftwardsHarpoonWithBarbUpwards),
            '↽' => Ok(Arrows::LeftwardsHarpoonWithBarbDownwards),
            '↾' => Ok(Arrows::UpwardsHarpoonWithBarbRightwards),
            '↿' => Ok(Arrows::UpwardsHarpoonWithBarbLeftwards),
            '⇀' => Ok(Arrows::RightwardsHarpoonWithBarbUpwards),
            '⇁' => Ok(Arrows::RightwardsHarpoonWithBarbDownwards),
            '⇂' => Ok(Arrows::DownwardsHarpoonWithBarbRightwards),
            '⇃' => Ok(Arrows::DownwardsHarpoonWithBarbLeftwards),
            '⇄' => Ok(Arrows::RightwardsArrowOverLeftwardsArrow),
            '⇅' => Ok(Arrows::UpwardsArrowLeftwardsOfDownwardsArrow),
            '⇆' => Ok(Arrows::LeftwardsArrowOverRightwardsArrow),
            '⇇' => Ok(Arrows::LeftwardsPaired),
            '⇈' => Ok(Arrows::UpwardsPaired),
            '⇉' => Ok(Arrows::RightwardsPaired),
            '⇊' => Ok(Arrows::DownwardsPaired),
            '⇋' => Ok(Arrows::LeftwardsHarpoonOverRightwardsHarpoon),
            '⇌' => Ok(Arrows::RightwardsHarpoonOverLeftwardsHarpoon),
            '⇍' => Ok(Arrows::LeftwardsDoubleArrowWithStroke),
            '⇎' => Ok(Arrows::LeftRightDoubleArrowWithStroke),
            '⇏' => Ok(Arrows::RightwardsDoubleArrowWithStroke),
            '⇐' => Ok(Arrows::LeftwardsDoubleArrow),
            '⇑' => Ok(Arrows::UpwardsDoubleArrow),
            '⇒' => Ok(Arrows::RightwardsDoubleArrow),
            '⇓' => Ok(Arrows::DownwardsDoubleArrow),
            '⇔' => Ok(Arrows::LeftRightDoubleArrow),
            '⇕' => Ok(Arrows::UpDownDoubleArrow),
            '⇖' => Ok(Arrows::NorthWestDoubleArrow),
            '⇗' => Ok(Arrows::NorthEastDoubleArrow),
            '⇘' => Ok(Arrows::SouthEastDoubleArrow),
            '⇙' => Ok(Arrows::SouthWestDoubleArrow),
            '⇚' => Ok(Arrows::LeftwardsTripleArrow),
            '⇛' => Ok(Arrows::RightwardsTripleArrow),
            '⇜' => Ok(Arrows::LeftwardsSquiggleArrow),
            '⇝' => Ok(Arrows::RightwardsSquiggleArrow),
            '⇞' => Ok(Arrows::UpwardsArrowWithDoubleStroke),
            '⇟' => Ok(Arrows::DownwardsArrowWithDoubleStroke),
            '⇠' => Ok(Arrows::LeftwardsDashedArrow),
            '⇡' => Ok(Arrows::UpwardsDashedArrow),
            '⇢' => Ok(Arrows::RightwardsDashedArrow),
            '⇣' => Ok(Arrows::DownwardsDashedArrow),
            '⇤' => Ok(Arrows::LeftwardsArrowToBar),
            '⇥' => Ok(Arrows::RightwardsArrowToBar),
            '⇦' => Ok(Arrows::LeftwardsWhiteArrow),
            '⇧' => Ok(Arrows::UpwardsWhiteArrow),
            '⇨' => Ok(Arrows::RightwardsWhiteArrow),
            '⇩' => Ok(Arrows::DownwardsWhiteArrow),
            '⇪' => Ok(Arrows::UpwardsWhiteArrowFromBar),
            '⇫' => Ok(Arrows::UpwardsWhiteArrowOnPedestal),
            '⇬' => Ok(Arrows::UpwardsWhiteArrowOnPedestalWithHorizontalBar),
            '⇭' => Ok(Arrows::UpwardsWhiteArrowOnPedestalWithVerticalBar),
            '⇮' => Ok(Arrows::UpwardsWhiteDoubleArrow),
            '⇯' => Ok(Arrows::UpwardsWhiteDoubleArrowOnPedestal),
            '⇰' => Ok(Arrows::RightwardsWhiteArrowFromWall),
            '⇱' => Ok(Arrows::NorthWestArrowToCorner),
            '⇲' => Ok(Arrows::SouthEastArrowToCorner),
            '⇳' => Ok(Arrows::UpDownWhiteArrow),
            '⇴' => Ok(Arrows::RightArrowWithSmallCircle),
            '⇵' => Ok(Arrows::DownwardsArrowLeftwardsOfUpwardsArrow),
            '⇶' => Ok(Arrows::ThreeRightwards),
            '⇷' => Ok(Arrows::LeftwardsArrowWithVerticalStroke),
            '⇸' => Ok(Arrows::RightwardsArrowWithVerticalStroke),
            '⇹' => Ok(Arrows::LeftRightArrowWithVerticalStroke),
            '⇺' => Ok(Arrows::LeftwardsArrowWithDoubleVerticalStroke),
            '⇻' => Ok(Arrows::RightwardsArrowWithDoubleVerticalStroke),
            '⇼' => Ok(Arrows::LeftRightArrowWithDoubleVerticalStroke),
            '⇽' => Ok(Arrows::LeftwardsOpenDashHeadedArrow),
            '⇾' => Ok(Arrows::RightwardsOpenDashHeadedArrow),
            _ => Err(()),
        }
    }
}

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

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