From 9f0f47abaa934b66da5b302236bfc89f95a7f329 Mon Sep 17 00:00:00 2001 From: Justin Wernick Date: Mon, 27 Feb 2023 23:12:32 +0200 Subject: Revamp parsing to support more complex commands --- src/main.rs | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) (limited to 'src/main.rs') diff --git a/src/main.rs b/src/main.rs index 93880de..0df2754 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,38 +1,45 @@ -use std::error::Error; use std::{io, io::Write}; +use thiserror::Error; -fn prompt() -> Result<(), Box> { +mod parser; + +use parser::Command; + +fn prompt() -> Result<(), ShackleError> { print!("> "); io::stdout().flush()?; Ok(()) } -fn read_stdin() -> Result> { +fn read_stdin() -> Result { let mut buffer = String::new(); io::stdin().read_line(&mut buffer)?; Ok(buffer) } -fn main() -> Result<(), Box> { +fn main() -> Result<(), ShackleError> { loop { prompt()?; let user_input = read_stdin()?; - if user_input.len() == 0 { - // control-d or end of input. Needs to be specially handled before - // the match because this is identical to whitespace after the trim. - break; - } - - match user_input.trim() { - "" => {} - "exit" => { + match user_input.parse::() { + Err(unknown_input) => { + println!("Unknown input \"{}\"", unknown_input); + } + Ok(Command::Whitespace) => {} + Ok(Command::Exit) => { break; } - other_input => { - println!("Unknown input {}", other_input); + Ok(Command::GitInit(repo_name)) => { + println!("Successfully created {}.git", repo_name); } } } Ok(()) } + +#[derive(Error, Debug)] +enum ShackleError { + #[error(transparent)] + IoError(#[from] io::Error), +} -- cgit v1.2.3