1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100
use std::error; use std::fmt; use std::io; use rustc_serialize::json; #[derive(Debug)] pub enum SlateError { IO(io::Error), JSON(json::EncoderError), } impl fmt::Display for SlateError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { SlateError::IO(ref err) => write!(f, "{}", err), SlateError::JSON(ref err) => write!(f, "{}", err), } } } impl error::Error for SlateError { fn description(&self) -> &str { match *self { SlateError::IO(ref err) => err.description(), SlateError::JSON(ref err) => err.description(), } } fn cause(&self) -> Option<&error::Error> { match *self { SlateError::IO(ref err) => Some(err), SlateError::JSON(ref err) => Some(err), } } } impl From<io::Error> for SlateError { fn from(err: io::Error) -> SlateError { SlateError::IO(err) } } impl From<json::EncoderError> for SlateError { fn from(err: json::EncoderError) -> SlateError { SlateError::JSON(err) } } #[derive(Debug)] pub enum CommandError { IO(io::Error), Slate(SlateError), Argument(String), } impl fmt::Display for CommandError { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { match *self { CommandError::IO(ref err) => write!(f, "{}", err), CommandError::Slate(ref err) => write!(f, "{}", err), CommandError::Argument(ref string) => write!(f, "{}", string), } } } impl error::Error for CommandError { fn description(&self) -> &str { match *self { CommandError::IO(ref err) => err.description(), CommandError::Slate(ref err) => err.description(), CommandError::Argument(ref string) => string, } } fn cause(&self) -> Option<&error::Error> { match *self { CommandError::IO(ref err) => Some(err), CommandError::Slate(ref err) => Some(err), CommandError::Argument(_) => None, } } } impl From<io::Error> for CommandError { fn from(err: io::Error) -> CommandError { CommandError::IO(err) } } impl From<SlateError> for CommandError { fn from(err: SlateError) -> CommandError { CommandError::Slate(err) } } impl From<String> for CommandError { fn from(err: String) -> CommandError { CommandError::Argument(err) } }