1
2#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
4pub enum Arrows {
5 LeftwardsArrow,
7 UpwardsArrow,
9 RightwardsArrow,
11 DownwardsArrow,
13 LeftRightArrow,
15 UpDownArrow,
17 NorthWestArrow,
19 NorthEastArrow,
21 SouthEastArrow,
23 SouthWestArrow,
25 LeftwardsArrowWithStroke,
27 RightwardsArrowWithStroke,
29 LeftwardsWaveArrow,
31 RightwardsWaveArrow,
33 LeftwardsTwoHeadedArrow,
35 UpwardsTwoHeadedArrow,
37 RightwardsTwoHeadedArrow,
39 DownwardsTwoHeadedArrow,
41 LeftwardsArrowWithTail,
43 RightwardsArrowWithTail,
45 LeftwardsArrowFromBar,
47 UpwardsArrowFromBar,
49 RightwardsArrowFromBar,
51 DownwardsArrowFromBar,
53 UpDownArrowWithBase,
55 LeftwardsArrowWithHook,
57 RightwardsArrowWithHook,
59 LeftwardsArrowWithLoop,
61 RightwardsArrowWithLoop,
63 LeftRightWaveArrow,
65 LeftRightArrowWithStroke,
67 DownwardsZigzagArrow,
69 UpwardsArrowWithTipLeftwards,
71 UpwardsArrowWithTipRightwards,
73 DownwardsArrowWithTipLeftwards,
75 DownwardsArrowWithTipRightwards,
77 RightwardsArrowWithCornerDownwards,
79 DownwardsArrowWithCornerLeftwards,
81 AnticlockwiseTopSemicircleArrow,
83 ClockwiseTopSemicircleArrow,
85 NorthWestArrowToLongBar,
87 LeftwardsArrowToBarOverRightwardsArrowToBar,
89 AnticlockwiseOpenCircleArrow,
91 ClockwiseOpenCircleArrow,
93 LeftwardsHarpoonWithBarbUpwards,
95 LeftwardsHarpoonWithBarbDownwards,
97 UpwardsHarpoonWithBarbRightwards,
99 UpwardsHarpoonWithBarbLeftwards,
101 RightwardsHarpoonWithBarbUpwards,
103 RightwardsHarpoonWithBarbDownwards,
105 DownwardsHarpoonWithBarbRightwards,
107 DownwardsHarpoonWithBarbLeftwards,
109 RightwardsArrowOverLeftwardsArrow,
111 UpwardsArrowLeftwardsOfDownwardsArrow,
113 LeftwardsArrowOverRightwardsArrow,
115 LeftwardsPaired,
117 UpwardsPaired,
119 RightwardsPaired,
121 DownwardsPaired,
123 LeftwardsHarpoonOverRightwardsHarpoon,
125 RightwardsHarpoonOverLeftwardsHarpoon,
127 LeftwardsDoubleArrowWithStroke,
129 LeftRightDoubleArrowWithStroke,
131 RightwardsDoubleArrowWithStroke,
133 LeftwardsDoubleArrow,
135 UpwardsDoubleArrow,
137 RightwardsDoubleArrow,
139 DownwardsDoubleArrow,
141 LeftRightDoubleArrow,
143 UpDownDoubleArrow,
145 NorthWestDoubleArrow,
147 NorthEastDoubleArrow,
149 SouthEastDoubleArrow,
151 SouthWestDoubleArrow,
153 LeftwardsTripleArrow,
155 RightwardsTripleArrow,
157 LeftwardsSquiggleArrow,
159 RightwardsSquiggleArrow,
161 UpwardsArrowWithDoubleStroke,
163 DownwardsArrowWithDoubleStroke,
165 LeftwardsDashedArrow,
167 UpwardsDashedArrow,
169 RightwardsDashedArrow,
171 DownwardsDashedArrow,
173 LeftwardsArrowToBar,
175 RightwardsArrowToBar,
177 LeftwardsWhiteArrow,
179 UpwardsWhiteArrow,
181 RightwardsWhiteArrow,
183 DownwardsWhiteArrow,
185 UpwardsWhiteArrowFromBar,
187 UpwardsWhiteArrowOnPedestal,
189 UpwardsWhiteArrowOnPedestalWithHorizontalBar,
191 UpwardsWhiteArrowOnPedestalWithVerticalBar,
193 UpwardsWhiteDoubleArrow,
195 UpwardsWhiteDoubleArrowOnPedestal,
197 RightwardsWhiteArrowFromWall,
199 NorthWestArrowToCorner,
201 SouthEastArrowToCorner,
203 UpDownWhiteArrow,
205 RightArrowWithSmallCircle,
207 DownwardsArrowLeftwardsOfUpwardsArrow,
209 ThreeRightwards,
211 LeftwardsArrowWithVerticalStroke,
213 RightwardsArrowWithVerticalStroke,
215 LeftRightArrowWithVerticalStroke,
217 LeftwardsArrowWithDoubleVerticalStroke,
219 RightwardsArrowWithDoubleVerticalStroke,
221 LeftRightArrowWithDoubleVerticalStroke,
223 LeftwardsOpenDashHeadedArrow,
225 RightwardsOpenDashHeadedArrow,
227}
228
229impl Into<char> for Arrows {
230 fn into(self) -> char {
231 match self {
232 Arrows::LeftwardsArrow => '←',
233 Arrows::UpwardsArrow => '↑',
234 Arrows::RightwardsArrow => '→',
235 Arrows::DownwardsArrow => '↓',
236 Arrows::LeftRightArrow => '↔',
237 Arrows::UpDownArrow => '↕',
238 Arrows::NorthWestArrow => '↖',
239 Arrows::NorthEastArrow => '↗',
240 Arrows::SouthEastArrow => '↘',
241 Arrows::SouthWestArrow => '↙',
242 Arrows::LeftwardsArrowWithStroke => '↚',
243 Arrows::RightwardsArrowWithStroke => '↛',
244 Arrows::LeftwardsWaveArrow => '↜',
245 Arrows::RightwardsWaveArrow => '↝',
246 Arrows::LeftwardsTwoHeadedArrow => '↞',
247 Arrows::UpwardsTwoHeadedArrow => '↟',
248 Arrows::RightwardsTwoHeadedArrow => '↠',
249 Arrows::DownwardsTwoHeadedArrow => '↡',
250 Arrows::LeftwardsArrowWithTail => '↢',
251 Arrows::RightwardsArrowWithTail => '↣',
252 Arrows::LeftwardsArrowFromBar => '↤',
253 Arrows::UpwardsArrowFromBar => '↥',
254 Arrows::RightwardsArrowFromBar => '↦',
255 Arrows::DownwardsArrowFromBar => '↧',
256 Arrows::UpDownArrowWithBase => '↨',
257 Arrows::LeftwardsArrowWithHook => '↩',
258 Arrows::RightwardsArrowWithHook => '↪',
259 Arrows::LeftwardsArrowWithLoop => '↫',
260 Arrows::RightwardsArrowWithLoop => '↬',
261 Arrows::LeftRightWaveArrow => '↭',
262 Arrows::LeftRightArrowWithStroke => '↮',
263 Arrows::DownwardsZigzagArrow => '↯',
264 Arrows::UpwardsArrowWithTipLeftwards => '↰',
265 Arrows::UpwardsArrowWithTipRightwards => '↱',
266 Arrows::DownwardsArrowWithTipLeftwards => '↲',
267 Arrows::DownwardsArrowWithTipRightwards => '↳',
268 Arrows::RightwardsArrowWithCornerDownwards => '↴',
269 Arrows::DownwardsArrowWithCornerLeftwards => '↵',
270 Arrows::AnticlockwiseTopSemicircleArrow => '↶',
271 Arrows::ClockwiseTopSemicircleArrow => '↷',
272 Arrows::NorthWestArrowToLongBar => '↸',
273 Arrows::LeftwardsArrowToBarOverRightwardsArrowToBar => '↹',
274 Arrows::AnticlockwiseOpenCircleArrow => '↺',
275 Arrows::ClockwiseOpenCircleArrow => '↻',
276 Arrows::LeftwardsHarpoonWithBarbUpwards => '↼',
277 Arrows::LeftwardsHarpoonWithBarbDownwards => '↽',
278 Arrows::UpwardsHarpoonWithBarbRightwards => '↾',
279 Arrows::UpwardsHarpoonWithBarbLeftwards => '↿',
280 Arrows::RightwardsHarpoonWithBarbUpwards => '⇀',
281 Arrows::RightwardsHarpoonWithBarbDownwards => '⇁',
282 Arrows::DownwardsHarpoonWithBarbRightwards => '⇂',
283 Arrows::DownwardsHarpoonWithBarbLeftwards => '⇃',
284 Arrows::RightwardsArrowOverLeftwardsArrow => '⇄',
285 Arrows::UpwardsArrowLeftwardsOfDownwardsArrow => '⇅',
286 Arrows::LeftwardsArrowOverRightwardsArrow => '⇆',
287 Arrows::LeftwardsPaired => '⇇',
288 Arrows::UpwardsPaired => '⇈',
289 Arrows::RightwardsPaired => '⇉',
290 Arrows::DownwardsPaired => '⇊',
291 Arrows::LeftwardsHarpoonOverRightwardsHarpoon => '⇋',
292 Arrows::RightwardsHarpoonOverLeftwardsHarpoon => '⇌',
293 Arrows::LeftwardsDoubleArrowWithStroke => '⇍',
294 Arrows::LeftRightDoubleArrowWithStroke => '⇎',
295 Arrows::RightwardsDoubleArrowWithStroke => '⇏',
296 Arrows::LeftwardsDoubleArrow => '⇐',
297 Arrows::UpwardsDoubleArrow => '⇑',
298 Arrows::RightwardsDoubleArrow => '⇒',
299 Arrows::DownwardsDoubleArrow => '⇓',
300 Arrows::LeftRightDoubleArrow => '⇔',
301 Arrows::UpDownDoubleArrow => '⇕',
302 Arrows::NorthWestDoubleArrow => '⇖',
303 Arrows::NorthEastDoubleArrow => '⇗',
304 Arrows::SouthEastDoubleArrow => '⇘',
305 Arrows::SouthWestDoubleArrow => '⇙',
306 Arrows::LeftwardsTripleArrow => '⇚',
307 Arrows::RightwardsTripleArrow => '⇛',
308 Arrows::LeftwardsSquiggleArrow => '⇜',
309 Arrows::RightwardsSquiggleArrow => '⇝',
310 Arrows::UpwardsArrowWithDoubleStroke => '⇞',
311 Arrows::DownwardsArrowWithDoubleStroke => '⇟',
312 Arrows::LeftwardsDashedArrow => '⇠',
313 Arrows::UpwardsDashedArrow => '⇡',
314 Arrows::RightwardsDashedArrow => '⇢',
315 Arrows::DownwardsDashedArrow => '⇣',
316 Arrows::LeftwardsArrowToBar => '⇤',
317 Arrows::RightwardsArrowToBar => '⇥',
318 Arrows::LeftwardsWhiteArrow => '⇦',
319 Arrows::UpwardsWhiteArrow => '⇧',
320 Arrows::RightwardsWhiteArrow => '⇨',
321 Arrows::DownwardsWhiteArrow => '⇩',
322 Arrows::UpwardsWhiteArrowFromBar => '⇪',
323 Arrows::UpwardsWhiteArrowOnPedestal => '⇫',
324 Arrows::UpwardsWhiteArrowOnPedestalWithHorizontalBar => '⇬',
325 Arrows::UpwardsWhiteArrowOnPedestalWithVerticalBar => '⇭',
326 Arrows::UpwardsWhiteDoubleArrow => '⇮',
327 Arrows::UpwardsWhiteDoubleArrowOnPedestal => '⇯',
328 Arrows::RightwardsWhiteArrowFromWall => '⇰',
329 Arrows::NorthWestArrowToCorner => '⇱',
330 Arrows::SouthEastArrowToCorner => '⇲',
331 Arrows::UpDownWhiteArrow => '⇳',
332 Arrows::RightArrowWithSmallCircle => '⇴',
333 Arrows::DownwardsArrowLeftwardsOfUpwardsArrow => '⇵',
334 Arrows::ThreeRightwards => '⇶',
335 Arrows::LeftwardsArrowWithVerticalStroke => '⇷',
336 Arrows::RightwardsArrowWithVerticalStroke => '⇸',
337 Arrows::LeftRightArrowWithVerticalStroke => '⇹',
338 Arrows::LeftwardsArrowWithDoubleVerticalStroke => '⇺',
339 Arrows::RightwardsArrowWithDoubleVerticalStroke => '⇻',
340 Arrows::LeftRightArrowWithDoubleVerticalStroke => '⇼',
341 Arrows::LeftwardsOpenDashHeadedArrow => '⇽',
342 Arrows::RightwardsOpenDashHeadedArrow => '⇾',
343 }
344 }
345}
346
347impl std::convert::TryFrom<char> for Arrows {
348 type Error = ();
349 fn try_from(c: char) -> Result<Self, Self::Error> {
350 match c {
351 '←' => Ok(Arrows::LeftwardsArrow),
352 '↑' => Ok(Arrows::UpwardsArrow),
353 '→' => Ok(Arrows::RightwardsArrow),
354 '↓' => Ok(Arrows::DownwardsArrow),
355 '↔' => Ok(Arrows::LeftRightArrow),
356 '↕' => Ok(Arrows::UpDownArrow),
357 '↖' => Ok(Arrows::NorthWestArrow),
358 '↗' => Ok(Arrows::NorthEastArrow),
359 '↘' => Ok(Arrows::SouthEastArrow),
360 '↙' => Ok(Arrows::SouthWestArrow),
361 '↚' => Ok(Arrows::LeftwardsArrowWithStroke),
362 '↛' => Ok(Arrows::RightwardsArrowWithStroke),
363 '↜' => Ok(Arrows::LeftwardsWaveArrow),
364 '↝' => Ok(Arrows::RightwardsWaveArrow),
365 '↞' => Ok(Arrows::LeftwardsTwoHeadedArrow),
366 '↟' => Ok(Arrows::UpwardsTwoHeadedArrow),
367 '↠' => Ok(Arrows::RightwardsTwoHeadedArrow),
368 '↡' => Ok(Arrows::DownwardsTwoHeadedArrow),
369 '↢' => Ok(Arrows::LeftwardsArrowWithTail),
370 '↣' => Ok(Arrows::RightwardsArrowWithTail),
371 '↤' => Ok(Arrows::LeftwardsArrowFromBar),
372 '↥' => Ok(Arrows::UpwardsArrowFromBar),
373 '↦' => Ok(Arrows::RightwardsArrowFromBar),
374 '↧' => Ok(Arrows::DownwardsArrowFromBar),
375 '↨' => Ok(Arrows::UpDownArrowWithBase),
376 '↩' => Ok(Arrows::LeftwardsArrowWithHook),
377 '↪' => Ok(Arrows::RightwardsArrowWithHook),
378 '↫' => Ok(Arrows::LeftwardsArrowWithLoop),
379 '↬' => Ok(Arrows::RightwardsArrowWithLoop),
380 '↭' => Ok(Arrows::LeftRightWaveArrow),
381 '↮' => Ok(Arrows::LeftRightArrowWithStroke),
382 '↯' => Ok(Arrows::DownwardsZigzagArrow),
383 '↰' => Ok(Arrows::UpwardsArrowWithTipLeftwards),
384 '↱' => Ok(Arrows::UpwardsArrowWithTipRightwards),
385 '↲' => Ok(Arrows::DownwardsArrowWithTipLeftwards),
386 '↳' => Ok(Arrows::DownwardsArrowWithTipRightwards),
387 '↴' => Ok(Arrows::RightwardsArrowWithCornerDownwards),
388 '↵' => Ok(Arrows::DownwardsArrowWithCornerLeftwards),
389 '↶' => Ok(Arrows::AnticlockwiseTopSemicircleArrow),
390 '↷' => Ok(Arrows::ClockwiseTopSemicircleArrow),
391 '↸' => Ok(Arrows::NorthWestArrowToLongBar),
392 '↹' => Ok(Arrows::LeftwardsArrowToBarOverRightwardsArrowToBar),
393 '↺' => Ok(Arrows::AnticlockwiseOpenCircleArrow),
394 '↻' => Ok(Arrows::ClockwiseOpenCircleArrow),
395 '↼' => Ok(Arrows::LeftwardsHarpoonWithBarbUpwards),
396 '↽' => Ok(Arrows::LeftwardsHarpoonWithBarbDownwards),
397 '↾' => Ok(Arrows::UpwardsHarpoonWithBarbRightwards),
398 '↿' => Ok(Arrows::UpwardsHarpoonWithBarbLeftwards),
399 '⇀' => Ok(Arrows::RightwardsHarpoonWithBarbUpwards),
400 '⇁' => Ok(Arrows::RightwardsHarpoonWithBarbDownwards),
401 '⇂' => Ok(Arrows::DownwardsHarpoonWithBarbRightwards),
402 '⇃' => Ok(Arrows::DownwardsHarpoonWithBarbLeftwards),
403 '⇄' => Ok(Arrows::RightwardsArrowOverLeftwardsArrow),
404 '⇅' => Ok(Arrows::UpwardsArrowLeftwardsOfDownwardsArrow),
405 '⇆' => Ok(Arrows::LeftwardsArrowOverRightwardsArrow),
406 '⇇' => Ok(Arrows::LeftwardsPaired),
407 '⇈' => Ok(Arrows::UpwardsPaired),
408 '⇉' => Ok(Arrows::RightwardsPaired),
409 '⇊' => Ok(Arrows::DownwardsPaired),
410 '⇋' => Ok(Arrows::LeftwardsHarpoonOverRightwardsHarpoon),
411 '⇌' => Ok(Arrows::RightwardsHarpoonOverLeftwardsHarpoon),
412 '⇍' => Ok(Arrows::LeftwardsDoubleArrowWithStroke),
413 '⇎' => Ok(Arrows::LeftRightDoubleArrowWithStroke),
414 '⇏' => Ok(Arrows::RightwardsDoubleArrowWithStroke),
415 '⇐' => Ok(Arrows::LeftwardsDoubleArrow),
416 '⇑' => Ok(Arrows::UpwardsDoubleArrow),
417 '⇒' => Ok(Arrows::RightwardsDoubleArrow),
418 '⇓' => Ok(Arrows::DownwardsDoubleArrow),
419 '⇔' => Ok(Arrows::LeftRightDoubleArrow),
420 '⇕' => Ok(Arrows::UpDownDoubleArrow),
421 '⇖' => Ok(Arrows::NorthWestDoubleArrow),
422 '⇗' => Ok(Arrows::NorthEastDoubleArrow),
423 '⇘' => Ok(Arrows::SouthEastDoubleArrow),
424 '⇙' => Ok(Arrows::SouthWestDoubleArrow),
425 '⇚' => Ok(Arrows::LeftwardsTripleArrow),
426 '⇛' => Ok(Arrows::RightwardsTripleArrow),
427 '⇜' => Ok(Arrows::LeftwardsSquiggleArrow),
428 '⇝' => Ok(Arrows::RightwardsSquiggleArrow),
429 '⇞' => Ok(Arrows::UpwardsArrowWithDoubleStroke),
430 '⇟' => Ok(Arrows::DownwardsArrowWithDoubleStroke),
431 '⇠' => Ok(Arrows::LeftwardsDashedArrow),
432 '⇡' => Ok(Arrows::UpwardsDashedArrow),
433 '⇢' => Ok(Arrows::RightwardsDashedArrow),
434 '⇣' => Ok(Arrows::DownwardsDashedArrow),
435 '⇤' => Ok(Arrows::LeftwardsArrowToBar),
436 '⇥' => Ok(Arrows::RightwardsArrowToBar),
437 '⇦' => Ok(Arrows::LeftwardsWhiteArrow),
438 '⇧' => Ok(Arrows::UpwardsWhiteArrow),
439 '⇨' => Ok(Arrows::RightwardsWhiteArrow),
440 '⇩' => Ok(Arrows::DownwardsWhiteArrow),
441 '⇪' => Ok(Arrows::UpwardsWhiteArrowFromBar),
442 '⇫' => Ok(Arrows::UpwardsWhiteArrowOnPedestal),
443 '⇬' => Ok(Arrows::UpwardsWhiteArrowOnPedestalWithHorizontalBar),
444 '⇭' => Ok(Arrows::UpwardsWhiteArrowOnPedestalWithVerticalBar),
445 '⇮' => Ok(Arrows::UpwardsWhiteDoubleArrow),
446 '⇯' => Ok(Arrows::UpwardsWhiteDoubleArrowOnPedestal),
447 '⇰' => Ok(Arrows::RightwardsWhiteArrowFromWall),
448 '⇱' => Ok(Arrows::NorthWestArrowToCorner),
449 '⇲' => Ok(Arrows::SouthEastArrowToCorner),
450 '⇳' => Ok(Arrows::UpDownWhiteArrow),
451 '⇴' => Ok(Arrows::RightArrowWithSmallCircle),
452 '⇵' => Ok(Arrows::DownwardsArrowLeftwardsOfUpwardsArrow),
453 '⇶' => Ok(Arrows::ThreeRightwards),
454 '⇷' => Ok(Arrows::LeftwardsArrowWithVerticalStroke),
455 '⇸' => Ok(Arrows::RightwardsArrowWithVerticalStroke),
456 '⇹' => Ok(Arrows::LeftRightArrowWithVerticalStroke),
457 '⇺' => Ok(Arrows::LeftwardsArrowWithDoubleVerticalStroke),
458 '⇻' => Ok(Arrows::RightwardsArrowWithDoubleVerticalStroke),
459 '⇼' => Ok(Arrows::LeftRightArrowWithDoubleVerticalStroke),
460 '⇽' => Ok(Arrows::LeftwardsOpenDashHeadedArrow),
461 '⇾' => Ok(Arrows::RightwardsOpenDashHeadedArrow),
462 _ => Err(()),
463 }
464 }
465}
466
467impl Into<u32> for Arrows {
468 fn into(self) -> u32 {
469 let c: char = self.into();
470 let hex = c
471 .escape_unicode()
472 .to_string()
473 .replace("\\u{", "")
474 .replace("}", "");
475 u32::from_str_radix(&hex, 16).unwrap()
476 }
477}
478
479impl std::convert::TryFrom<u32> for Arrows {
480 type Error = ();
481 fn try_from(u: u32) -> Result<Self, Self::Error> {
482 if let Ok(c) = char::try_from(u) {
483 Self::try_from(c)
484 } else {
485 Err(())
486 }
487 }
488}
489
490impl Iterator for Arrows {
491 type Item = Self;
492 fn next(&mut self) -> Option<Self> {
493 let index: u32 = (*self).into();
494 use std::convert::TryFrom;
495 Self::try_from(index + 1).ok()
496 }
497}
498
499impl Arrows {
500 pub fn new() -> Self {
502 Arrows::LeftwardsArrow
503 }
504
505 pub fn name(&self) -> String {
507 let s = std::format!("Arrows{:#?}", self);
508 string_morph::to_sentence_case(&s)
509 }
510}