From 908f8e4e93deb11ea2368e3b065315bf730bddd2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Miguel?= Date: Thu, 8 Apr 2021 00:38:24 -0300 Subject: [PATCH] oof: Add variant UnknownLongFlag and remove missing panics --- oof/src/error.rs | 2 ++ oof/src/flags.rs | 2 +- oof/src/lib.rs | 15 ++++++--------- 3 files changed, 9 insertions(+), 10 deletions(-) diff --git a/oof/src/error.rs b/oof/src/error.rs index f1435ca..86ead8c 100644 --- a/oof/src/error.rs +++ b/oof/src/error.rs @@ -13,6 +13,7 @@ pub enum OofError<'t> { InvalidUnicode(OsString), /// User supplied an unrecognized short flag UnknownShortFlag(char), + UnknownLongFlag(String), MisplacedShortArgFlagError(char), MissingValueToFlag(&'t Flag), DuplicatedFlag(&'t Flag) @@ -42,6 +43,7 @@ impl<'t> fmt::Display for OofError<'t> { OofError::MisplacedShortArgFlagError(ch) => write!(f, "Invalid placement of `-{}`.\nOnly the last letter in a sequence of short flags can take values.", ch), OofError::MissingValueToFlag(flag) => write!(f, "Flag {} takes value but none was supplied.", flag), OofError::DuplicatedFlag(flag) => write!(f, "Duplicated usage of {}.", flag), + OofError::UnknownLongFlag(flag) => write!(f, "Unknown argument '--{}'", flag), } } } diff --git a/oof/src/flags.rs b/oof/src/flags.rs index 0b3e7cc..043896e 100644 --- a/oof/src/flags.rs +++ b/oof/src/flags.rs @@ -32,7 +32,7 @@ pub struct Flag { impl std::fmt::Display for Flag { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { match self.short { - Some(short_flag) => write!(f, "-{}, --{}", short_flag, self.long), + Some(short_flag) => write!(f, "-{}/--{}", short_flag, self.long), None => write!(f, "--{}", self.long), } } diff --git a/oof/src/lib.rs b/oof/src/lib.rs index 4fc65d1..69084b6 100644 --- a/oof/src/lib.rs +++ b/oof/src/lib.rs @@ -167,9 +167,9 @@ pub fn filter_flags( if let FlagType::Long = flag_type { let flag = trim_double_hyphen(flag); - let flag_info = long_flags_info.get(flag).unwrap_or_else(|| { - panic!("User error: Unexpected/UNKNOWN flag '{}'", flag); - }); + let flag_info = long_flags_info.get(flag).ok_or_else(|| { + OofError::UnknownLongFlag(String::from(flag)) + })?; let flag_name = flag_info.long; @@ -179,12 +179,9 @@ pub fn filter_flags( return Err(OofError::DuplicatedFlag(flag_info)); } - let flag_argument = iter.next().unwrap_or_else(|| { - panic!( - "USer errror: argument flag `argument_flag` came at last, but it requires \ - an argument" - ) - }); + let flag_argument = iter.next().ok_or_else(|| { + OofError::MissingValueToFlag(flag_info) + })?; result_flags.argument_flags.insert(flag_name, flag_argument); } else { // If it was already inserted