diff --git a/src/cli.rs b/src/cli.rs index 5015dd4..1fdcaa3 100644 --- a/src/cli.rs +++ b/src/cli.rs @@ -6,7 +6,7 @@ use std::{ }; use strsim::normalized_damerau_levenshtein; -use oof::{Flag, arg_flag, flag}; +use oof::{arg_flag, flag}; #[derive(PartialEq, Eq, Debug)] @@ -98,8 +98,10 @@ pub fn parse_args_from(mut args: Vec) -> crate::Result { let mut flags_info = vec![flag!('y', "yes"), flag!('n', "no")]; - let process_compression_command = |args, flags_info: Vec| { - let (args, flags) = oof::filter_flags(args, &flags_info)?; + let parsed_args = match oof::pop_subcommand(&mut args, subcommands) { + Some(&"compress") => { + // `ouch compress` subcommand + let (args, flags) = oof::filter_flags(args, &flags_info)?; let mut files: Vec = args.into_iter().map(PathBuf::from).collect(); if files.len() < 2 { @@ -115,24 +117,15 @@ pub fn parse_args_from(mut args: Vec) -> crate::Result { files, compressed_output_path, }; - Ok(ParsedArgs { command, flags }) - }; - - let parsed_args = match oof::pop_subcommand(&mut args, subcommands) { - Some(&"compress") => { - process_compression_command(args, flags_info)? + ParsedArgs { command, flags } } // Defaults to decompression when there is no subcommand None => { flags_info.push(arg_flag!('o', "output")); - { let first_arg = args.first().unwrap(); if is_typo(first_arg) { - println!("Did you mean `ouch compress`?"); - // TODO: ask for permission ? - args.remove(0); - return process_compression_command(args, flags_info); + return Err(crate::Error::CompressionTypo); } } diff --git a/src/error.rs b/src/error.rs index 3e1bec5..2c869c0 100644 --- a/src/error.rs +++ b/src/error.rs @@ -17,6 +17,7 @@ pub enum Error { OofError, CompressingRootFolder, MissingArgumentsForCompression, + CompressionTypo, WalkdirError, } @@ -78,6 +79,9 @@ impl fmt::Display for Error { Error::IoError(io_err) => { write!(f, "{}[ERROR]{} {}", colors::red(), colors::reset(), io_err) } + Error::CompressionTypo =>{ + write!(f, "Did you mean {}ouch compress{}?", colors::magenta(), colors::reset()) + } _err => { // TODO write!(f, "")