37
crates/hyperlog-tui/src/command_parser.rs
Normal file
37
crates/hyperlog-tui/src/command_parser.rs
Normal file
@@ -0,0 +1,37 @@
|
||||
use itertools::Itertools;
|
||||
|
||||
pub enum Commands {
|
||||
Write,
|
||||
Quit,
|
||||
WriteQuit,
|
||||
}
|
||||
|
||||
impl Commands {
|
||||
pub fn is_write(&self) -> bool {
|
||||
matches!(self, Commands::Write | Commands::WriteQuit)
|
||||
}
|
||||
|
||||
pub fn is_quit(&self) -> bool {
|
||||
matches!(self, Commands::Quit | Commands::WriteQuit)
|
||||
}
|
||||
}
|
||||
|
||||
pub struct CommandParser {}
|
||||
|
||||
impl CommandParser {
|
||||
pub fn parse(raw_command: &str) -> Option<Commands> {
|
||||
let prepared = raw_command.trim();
|
||||
// TODO: respect quotes
|
||||
let parts = prepared.split_whitespace().collect_vec();
|
||||
|
||||
match parts.split_first() {
|
||||
Some((command, _)) => match *command {
|
||||
"w" | "write" => Some(Commands::Write),
|
||||
"q" | "quit" => Some(Commands::Quit),
|
||||
"wq" | "write-quit" => Some(Commands::WriteQuit),
|
||||
_ => None,
|
||||
},
|
||||
None => None,
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user