use serde::{Deserialize, Serialize};
use crate::kakoune::selection::SelectMode;
#[derive(Clone, Debug, Deserialize, Eq, PartialEq, Serialize)]
#[serde(rename_all = "snake_case")]
pub enum OperationMode {
SearchNext,
SearchPrev,
SearchExtendNext,
SearchExtendPrev,
FindNext,
FindPrev,
ExtendNext,
ExtendPrev,
Select,
Object { mode: SelectMode, flags: String },
}
#[cfg(test)]
mod tests {
use crate::kakoune::{selection::SelectMode, text_objects::OperationMode};
#[test]
fn deser() {
assert_eq!(
serde_json::from_str::<OperationMode>("\"search_next\"").unwrap(),
OperationMode::SearchNext
);
assert_eq!(
serde_json::from_str::<OperationMode>("\"search_prev\"").unwrap(),
OperationMode::SearchPrev
);
assert_eq!(
serde_json::from_str::<OperationMode>("\"search_extend_next\"").unwrap(),
OperationMode::SearchExtendNext
);
assert_eq!(
serde_json::from_str::<OperationMode>("\"search_extend_prev\"").unwrap(),
OperationMode::SearchExtendPrev
);
assert_eq!(
serde_json::from_str::<OperationMode>("\"find_next\"").unwrap(),
OperationMode::FindNext
);
assert_eq!(
serde_json::from_str::<OperationMode>("\"find_prev\"").unwrap(),
OperationMode::FindPrev
);
assert_eq!(
serde_json::from_str::<OperationMode>("\"extend_next\"").unwrap(),
OperationMode::ExtendNext
);
assert_eq!(
serde_json::from_str::<OperationMode>("\"extend_prev\"").unwrap(),
OperationMode::ExtendPrev
);
assert_eq!(
serde_json::from_str::<OperationMode>(
r#"{ "object": { "mode": "replace", "flags": "to_begin|to_end|inner" }}"#
)
.unwrap(),
OperationMode::Object {
mode: SelectMode::Replace,
flags: "to_begin|to_end|inner".to_owned()
}
);
}
}