use bevy::prelude::Resource;
use super::InsertState;
#[derive(Clone, Copy, Debug, Default, Eq, PartialEq, Resource)]
pub enum VimMode {
#[default]
Normal,
Insert(InsertState),
Visual(VisualMode),
}
impl VimMode {
#[must_use]
pub const fn is_insert(self) -> bool {
matches!(self, Self::Insert(_))
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum VisualMode {
Characterwise,
Linewise,
Blockwise,
}
#[cfg(test)]
mod tests {
use super::VimMode;
use crate::vim::{InsertExitPolicy, InsertState};
#[test]
fn insert_mode_carries_insert_state() {
let state = InsertState::new(InsertExitPolicy::KeepCursor);
assert_eq!(VimMode::Insert(state), VimMode::Insert(state));
assert!(VimMode::Insert(state).is_insert());
assert!(!VimMode::Normal.is_insert());
}
}