use schemars::JsonSchema;
use serde::{Deserialize, Serialize};
use crate::edit::Edit;
use crate::mode::Mode;
use crate::motion::{Motion, Operator};
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub enum Action {
Move(Motion),
ApplyOperator {
op: Operator,
motion: Motion,
},
Edit(Edit),
ChangeMode(Mode),
Command {
name: String,
args: Vec<String>,
},
InsertChar(char),
SubmitCommand,
Undo,
Redo,
Save,
Quit,
Pending,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, JsonSchema)]
pub struct CountedAction {
pub count: u32,
pub action: Action,
}
impl CountedAction {
#[must_use]
pub fn once(action: Action) -> Self {
Self { count: 1, action }
}
#[must_use]
pub fn repeated(count: u32, action: Action) -> Self {
Self {
count: count.max(1),
action,
}
}
}