#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum PendingState {
Replace { count: usize },
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub enum Outcome {
Wait(PendingState),
Commit(crate::cmd::EngineCmd),
Cancel,
Forward,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Key {
Char(char),
Esc,
Enter,
Backspace,
Tab,
}
pub fn step(state: PendingState, key: Key) -> Outcome {
match state {
PendingState::Replace { count } => match key {
Key::Esc => Outcome::Cancel,
Key::Char(ch) => Outcome::Commit(crate::cmd::EngineCmd::ReplaceChar { ch, count }),
Key::Enter => Outcome::Commit(crate::cmd::EngineCmd::ReplaceChar { ch: '\n', count }),
_ => Outcome::Cancel,
},
}
}