diff options
author | Julian T. <julian@jtle.dk> | 2024-04-28 00:05:33 +0200 |
---|---|---|
committer | Julian T. <julian@jtle.dk> | 2024-04-28 00:05:33 +0200 |
commit | 0b29e9b14607f3226c46f75a20f11abd49c8f4a6 (patch) | |
tree | f35d4d8021fc018e7e04c4268b543b1971a9af66 /src/commands | |
parent | b27e72f5ac588506941b74c1f421235eb59e69d5 (diff) |
Start with tui instead
Diffstat (limited to 'src/commands')
-rw-r--r-- | src/commands/mod.rs | 2 | ||||
-rw-r--r-- | src/commands/parser.rs | 77 | ||||
-rw-r--r-- | src/commands/start.rs | 12 |
3 files changed, 0 insertions, 91 deletions
diff --git a/src/commands/mod.rs b/src/commands/mod.rs deleted file mode 100644 index 5a61ce8..0000000 --- a/src/commands/mod.rs +++ /dev/null @@ -1,2 +0,0 @@ -mod start; -mod parser; diff --git a/src/commands/parser.rs b/src/commands/parser.rs deleted file mode 100644 index e75840c..0000000 --- a/src/commands/parser.rs +++ /dev/null @@ -1,77 +0,0 @@ - -pub enum ParseResult<'a, T> { - Success(T, &'a str), - Failure(String), -} - -pub trait Parse<'a> { - type Res; - - fn parse(self, input: &'a str) -> ParseResult<'a, Self::Res>; -} - -pub struct Text(String); - -impl<'a> Parse<'a> for Text { - type Res = Text; - - fn parse(self, input: &'a str) -> ParseResult<'a, Text> { - let mut value = String::new(); - - let mut it = input.chars(); - let mut escape_next = false; - while let Some(c) = it.next() { - if c == '\\' && !escape_next { - escape_next = true; - continue; - } else if c == ';' { - break; - } - value.push(c); - - escape_next = false; - } - - ParseResult::Success(Text(value), it.as_str()) - } -} - -pub struct Branch<T> { - choices: Vec<(&'static str, Option<char>, T)>, -} - -impl<'a, T> Parse<'a> for Branch<T> { - type Res = T; - - fn parse(self, input: &'a str) -> ParseResult<'a, T> { - let choices: Vec<&'static str> = self.choices.iter().map(|x| x.0).collect(); - - for (long, short_op, res) in self.choices { - let rest = if input.starts_with(long) { - Some(&input[long.len()..]) - } else if let Some(short) = short_op { - if input.starts_with(short) { - Some(&input[1..]) - } else { - None - } - } else { None }; - - if let Some(rest) = rest { - return ParseResult::Success(res, rest); - } - } - - return ParseResult::Failure(format!("Expected one of [{}]", choices.join(", "))); - } -} - -impl<T> Branch<T> { - pub fn new() -> Branch<T> { - Branch { choices: Vec::new() } - } - - pub fn add(&mut self, long: &'static str, short: Option<char>, res: T) { - self.choices.push((long, short, res)); - } -} diff --git a/src/commands/start.rs b/src/commands/start.rs deleted file mode 100644 index a122d5c..0000000 --- a/src/commands/start.rs +++ /dev/null @@ -1,12 +0,0 @@ -use crate::commands::parser::{Text, Parse}; - -pub enum Commands { - Start(Text), -} - -impl<'a> Parse<'a> for Commands { - type Res = Commands; - - fn parse(self -} - |