From faae7c088ffc055095d3ab7c0326295d040da084 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Vin=C3=ADcius=20Miguel?= Date: Wed, 7 Apr 2021 23:28:37 -0300 Subject: [PATCH] oof: add error variant MissingValueToFlag --- oof/src/error.rs | 10 ++++++---- oof/src/lib.rs | 9 +++------ src/error.rs | 2 +- 3 files changed, 10 insertions(+), 11 deletions(-) diff --git a/oof/src/error.rs b/oof/src/error.rs index 3403771..fd3675c 100644 --- a/oof/src/error.rs +++ b/oof/src/error.rs @@ -3,7 +3,7 @@ use std::{error, ffi::OsString, fmt}; use crate::Flag; #[derive(Debug)] -pub enum OofError{ +pub enum OofError<'t> { FlagValueConflict { flag: Flag, previous_value: OsString, @@ -13,16 +13,17 @@ pub enum OofError{ InvalidUnicode(OsString), /// User supplied an unrecognized short flag UnknownShortFlag(char), - MisplacedShortArgFlagError(char) + MisplacedShortArgFlagError(char), + MissingValueToFlag(&'t Flag) } -impl error::Error for OofError { +impl<'t> error::Error for OofError<'t> { fn source(&self) -> Option<&(dyn error::Error + 'static)> { None } } -impl fmt::Display for OofError { +impl<'t> fmt::Display for OofError<'t> { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { // TODO: implement proper debug messages match self { @@ -38,6 +39,7 @@ impl fmt::Display for OofError { 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) } } } diff --git a/oof/src/lib.rs b/oof/src/lib.rs index ef509ac..2763f30 100644 --- a/oof/src/lib.rs +++ b/oof/src/lib.rs @@ -147,12 +147,9 @@ pub fn filter_flags( } // pop the next one - 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) + })?; // Otherwise, insert it. result_flags.argument_flags.insert(flag_name, flag_argument); diff --git a/src/error.rs b/src/error.rs index 5656314..ea6d69e 100644 --- a/src/error.rs +++ b/src/error.rs @@ -116,7 +116,7 @@ impl From for Error { } } -impl From for Error { +impl<'t> From> for Error { fn from(_err: oof::OofError) -> Self { todo!("We need to implement this properly"); }