#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
#[non_exhaustive]
pub enum SplitDirection {
Right,
Left,
Down,
Up,
}
impl SplitDirection {
pub(crate) fn axis(self) -> rmux_proto::SplitDirection {
match self {
Self::Right | Self::Left => rmux_proto::SplitDirection::Horizontal,
Self::Up | Self::Down => rmux_proto::SplitDirection::Vertical,
}
}
pub(crate) fn before(self) -> bool {
matches!(self, Self::Left | Self::Up)
}
}
#[cfg(test)]
mod tests {
use super::SplitDirection;
#[test]
fn right_and_down_insert_after() {
assert!(!SplitDirection::Right.before());
assert!(!SplitDirection::Down.before());
}
#[test]
fn left_and_up_insert_before() {
assert!(SplitDirection::Left.before());
assert!(SplitDirection::Up.before());
}
#[test]
fn horizontal_directions_share_an_axis() {
assert_eq!(SplitDirection::Right.axis(), SplitDirection::Left.axis());
}
#[test]
fn vertical_directions_share_an_axis() {
assert_eq!(SplitDirection::Up.axis(), SplitDirection::Down.axis());
}
#[test]
fn horizontal_and_vertical_axes_differ() {
assert_ne!(SplitDirection::Right.axis(), SplitDirection::Down.axis());
}
}