From 613074dff126f4bc6cb96a65d745154d23ff2dc8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Miguel?= Date: Wed, 7 Apr 2021 23:36:58 -0300 Subject: [PATCH] oof: add error variant DuplicatedFlag --- oof/src/error.rs | 6 ++++-- oof/src/lib.rs | 8 ++++---- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/oof/src/error.rs b/oof/src/error.rs index fd3675c..f1435ca 100644 --- a/oof/src/error.rs +++ b/oof/src/error.rs @@ -14,7 +14,8 @@ pub enum OofError<'t> { /// User supplied an unrecognized short flag UnknownShortFlag(char), MisplacedShortArgFlagError(char), - MissingValueToFlag(&'t Flag) + MissingValueToFlag(&'t Flag), + DuplicatedFlag(&'t Flag) } impl<'t> error::Error for OofError<'t> { @@ -39,7 +40,8 @@ impl<'t> fmt::Display for OofError<'t> { OofError::InvalidUnicode(flag) => write!(f, "{:?} is not valid Unicode.", flag), OofError::UnknownShortFlag(ch) => write!(f, "Unknown argument '-{}'", ch), 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::MissingValueToFlag(flag) => write!(f, "Flag {} takes value but none was supplied.", flag), + OofError::DuplicatedFlag(flag) => write!(f, "Duplicated usage of {}.", flag), } } } diff --git a/oof/src/lib.rs b/oof/src/lib.rs index 2763f30..4fc65d1 100644 --- a/oof/src/lib.rs +++ b/oof/src/lib.rs @@ -143,7 +143,7 @@ pub fn filter_flags( if flag_info.takes_value { // If it was already inserted if result_flags.argument_flags.contains_key(flag_name) { - panic!("User error: duplicated, found this flag TWICE!"); + return Err(OofError::DuplicatedFlag(flag_info)); } // pop the next one @@ -156,7 +156,7 @@ pub fn filter_flags( } else { // If it was already inserted if result_flags.boolean_flags.contains(flag_name) { - panic!("User error: duplicated, found this flag TWICE!"); + return Err(OofError::DuplicatedFlag(flag_info)); } // Otherwise, insert it result_flags.boolean_flags.insert(flag_name); @@ -176,7 +176,7 @@ pub fn filter_flags( if flag_info.takes_value { // If it was already inserted if result_flags.argument_flags.contains_key(&flag_name) { - panic!("User error: duplicated, found this flag TWICE!"); + return Err(OofError::DuplicatedFlag(flag_info)); } let flag_argument = iter.next().unwrap_or_else(|| { @@ -189,7 +189,7 @@ pub fn filter_flags( } else { // If it was already inserted if result_flags.boolean_flags.contains(&flag_name) { - panic!("User error: duplicated, found this flag TWICE!"); + return Err(OofError::DuplicatedFlag(flag_info)); } // Otherwise, insert it result_flags.boolean_flags.insert(&flag_name);