use ratatui::layout::Position;
#[derive(Default, Clone, Copy, Debug, PartialEq, Eq)]
pub enum CursorSlot {
#[default]
NotSet,
Show(Position),
Hide,
}
impl CursorSlot {
#[must_use]
pub fn resolve(self, last_cursor: Option<Position>) -> Option<Position> {
match self {
CursorSlot::NotSet => last_cursor,
CursorSlot::Show(p) => Some(p),
CursorSlot::Hide => None,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
const P1: Position = Position { x: 1, y: 1 };
const P2: Position = Position { x: 2, y: 2 };
#[test]
fn notset_falls_back_to_last_cursor() {
assert_eq!(CursorSlot::NotSet.resolve(Some(P1)), Some(P1));
assert_eq!(CursorSlot::NotSet.resolve(None), None);
}
#[test]
fn show_is_authoritative_over_last_cursor() {
assert_eq!(CursorSlot::Show(P2).resolve(Some(P1)), Some(P2));
assert_eq!(CursorSlot::Show(P2).resolve(None), Some(P2));
}
#[test]
fn hide_is_authoritative_over_last_cursor() {
assert_eq!(CursorSlot::Hide.resolve(Some(P1)), None);
assert_eq!(CursorSlot::Hide.resolve(None), None);
}
#[test]
fn default_is_notset() {
assert_eq!(CursorSlot::default(), CursorSlot::NotSet);
}
}