Implemented new Error struct
This custom Error struct will replace the existing ErrorKind enum for Pirate errors (though ErrorKind will remain in use)
This commit is contained in:
parent
11a9fc97f7
commit
78a56f27f8
1 changed files with 31 additions and 9 deletions
|
@ -15,26 +15,48 @@
|
|||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
*/
|
||||
|
||||
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())
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue