From 78a56f27f8f29c93caa8a56e69d0f5a2bdcdc17e Mon Sep 17 00:00:00 2001 From: Zach Dziura Date: Tue, 28 Apr 2015 18:34:17 +0000 Subject: [PATCH] Implemented new Error struct This custom Error struct will replace the existing ErrorKind enum for Pirate errors (though ErrorKind will remain in use) --- src/errors.rs | 40 +++++++++++++++++++++++++++++++--------- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/src/errors.rs b/src/errors.rs index 90527c9..4c1cf8a 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -15,26 +15,48 @@ * along with this program. If not, see . */ -use std::error::Error; +use std::error; use std::fmt::{Display, Formatter, Result}; #[derive(Debug)] +pub struct Error { + kind: ErrorKind, + offender: String, + desc: String, +} + +impl Error { + pub fn new(kind: ErrorKind, offender: String) -> Error { + Error { + kind: kind, + offender: offender, + } + } +} + +impl error::Error for Error { + fn description(&self) -> &str { + &format!("{} {}", self.kind.description(), self.offender); + } +} + +impl Display for Error { + fn fmt(&self, f: &mut Formatter) -> Result { + write!(f, "{}", self.description()) + } +} + pub enum ErrorKind { InvalidOption, MissingArgument, } -impl Error for ErrorKind { +impl ErrorKind { fn description(&self) -> &str { match *self { - ErrorKind::InvalidOption => "An invalid option was passed to the program", - ErrorKind::MissingArgument => "A required argument is missing", + ErrorKind::InvalidOption => "An invalid option was passed to the program:", + ErrorKind::MissingArgument => "A required argument is missing:", } } } -impl Display for ErrorKind { - fn fmt(&self, f: &mut Formatter) -> Result { - write!(f, "{}", self.description()) - } -}