use super::HistoryDirection;
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub(super) enum HistoryStep {
Recall { index: usize, save_draft: bool },
RestoreDraft,
}
pub(super) fn history_step(
direction: HistoryDirection,
len: usize,
cursor: Option<usize>,
) -> Option<HistoryStep> {
if len == 0 {
return None;
}
let step = match (direction, cursor) {
(HistoryDirection::Previous, None) => HistoryStep::Recall {
index: len - 1,
save_draft: true,
},
(HistoryDirection::Previous, Some(cursor)) => HistoryStep::Recall {
index: cursor.saturating_sub(1),
save_draft: false,
},
(HistoryDirection::Next, None) => return None,
(HistoryDirection::Next, Some(cursor)) if cursor + 1 < len => HistoryStep::Recall {
index: cursor + 1,
save_draft: false,
},
(HistoryDirection::Next, Some(_)) => HistoryStep::RestoreDraft,
};
Some(step)
}