#[derive(Debug, Clone, Copy, Hash, PartialEq, Eq)]
pub enum Arrows {
LeftwardsArrow,
UpwardsArrow,
RightwardsArrow,
DownwardsArrow,
LeftRightArrow,
UpDownArrow,
NorthWestArrow,
NorthEastArrow,
SouthEastArrow,
SouthWestArrow,
LeftwardsArrowWithStroke,
RightwardsArrowWithStroke,
LeftwardsWaveArrow,
RightwardsWaveArrow,
LeftwardsTwoHeadedArrow,
UpwardsTwoHeadedArrow,
RightwardsTwoHeadedArrow,
DownwardsTwoHeadedArrow,
LeftwardsArrowWithTail,
RightwardsArrowWithTail,
LeftwardsArrowFromBar,
UpwardsArrowFromBar,
RightwardsArrowFromBar,
DownwardsArrowFromBar,
UpDownArrowWithBase,
LeftwardsArrowWithHook,
RightwardsArrowWithHook,
LeftwardsArrowWithLoop,
RightwardsArrowWithLoop,
LeftRightWaveArrow,
LeftRightArrowWithStroke,
DownwardsZigzagArrow,
UpwardsArrowWithTipLeftwards,
UpwardsArrowWithTipRightwards,
DownwardsArrowWithTipLeftwards,
DownwardsArrowWithTipRightwards,
RightwardsArrowWithCornerDownwards,
DownwardsArrowWithCornerLeftwards,
AnticlockwiseTopSemicircleArrow,
ClockwiseTopSemicircleArrow,
NorthWestArrowToLongBar,
LeftwardsArrowToBarOverRightwardsArrowToBar,
AnticlockwiseOpenCircleArrow,
ClockwiseOpenCircleArrow,
LeftwardsHarpoonWithBarbUpwards,
LeftwardsHarpoonWithBarbDownwards,
UpwardsHarpoonWithBarbRightwards,
UpwardsHarpoonWithBarbLeftwards,
RightwardsHarpoonWithBarbUpwards,
RightwardsHarpoonWithBarbDownwards,
DownwardsHarpoonWithBarbRightwards,
DownwardsHarpoonWithBarbLeftwards,
RightwardsArrowOverLeftwardsArrow,
UpwardsArrowLeftwardsOfDownwardsArrow,
LeftwardsArrowOverRightwardsArrow,
LeftwardsPaired,
UpwardsPaired,
RightwardsPaired,
DownwardsPaired,
LeftwardsHarpoonOverRightwardsHarpoon,
RightwardsHarpoonOverLeftwardsHarpoon,
LeftwardsDoubleArrowWithStroke,
LeftRightDoubleArrowWithStroke,
RightwardsDoubleArrowWithStroke,
LeftwardsDoubleArrow,
UpwardsDoubleArrow,
RightwardsDoubleArrow,
DownwardsDoubleArrow,
LeftRightDoubleArrow,
UpDownDoubleArrow,
NorthWestDoubleArrow,
NorthEastDoubleArrow,
SouthEastDoubleArrow,
SouthWestDoubleArrow,
LeftwardsTripleArrow,
RightwardsTripleArrow,
LeftwardsSquiggleArrow,
RightwardsSquiggleArrow,
UpwardsArrowWithDoubleStroke,
DownwardsArrowWithDoubleStroke,
LeftwardsDashedArrow,
UpwardsDashedArrow,
RightwardsDashedArrow,
DownwardsDashedArrow,
LeftwardsArrowToBar,
RightwardsArrowToBar,
LeftwardsWhiteArrow,
UpwardsWhiteArrow,
RightwardsWhiteArrow,
DownwardsWhiteArrow,
UpwardsWhiteArrowFromBar,
UpwardsWhiteArrowOnPedestal,
UpwardsWhiteArrowOnPedestalWithHorizontalBar,
UpwardsWhiteArrowOnPedestalWithVerticalBar,
UpwardsWhiteDoubleArrow,
UpwardsWhiteDoubleArrowOnPedestal,
RightwardsWhiteArrowFromWall,
NorthWestArrowToCorner,
SouthEastArrowToCorner,
UpDownWhiteArrow,
RightArrowWithSmallCircle,
DownwardsArrowLeftwardsOfUpwardsArrow,
ThreeRightwards,
LeftwardsArrowWithVerticalStroke,
RightwardsArrowWithVerticalStroke,
LeftRightArrowWithVerticalStroke,
LeftwardsArrowWithDoubleVerticalStroke,
RightwardsArrowWithDoubleVerticalStroke,
LeftRightArrowWithDoubleVerticalStroke,
LeftwardsOpenDashHeadedArrow,
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 {
pub fn new() -> Self {
Arrows::LeftwardsArrow
}
pub fn name(&self) -> String {
let s = std::format!("Arrows{:#?}", self);
string_morph::to_sentence_case(&s)
}
}