use super::{Directions, RotateDirections, SpecialDirections};
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[cfg_attr(feature = "bitcode", derive(bitcode::Encode, bitcode::Decode))]
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, PartialOrd, Ord)]
#[cfg_attr(feature = "c_compatible", repr(C))]
#[cfg_attr(all(feature = "strum"), derive(strum::EnumIter))]
pub enum DirectionsWithNone {
Base(Directions),
Special(SpecialDirections),
}
impl core::default::Default for DirectionsWithNone {
fn default() -> Self {
Self::Special(SpecialDirections::default())
}
}
impl const RotateDirections for DirectionsWithNone {
fn rotate_clockwise_90(&self) -> Self {
match self {
Self::Base(direction) => {
Self::Base(direction.rotate_clockwise_90())
}
Self::Special(SpecialDirections::None) => {
Self::Special(SpecialDirections::None)
}
}
}
fn rotate_counterclockwise_90(&self) -> Self {
match self {
Self::Base(direction) => {
Self::Base(direction.rotate_counterclockwise_90())
}
Self::Special(SpecialDirections::None) => {
Self::Special(SpecialDirections::None)
}
}
}
}