From c42b3daead61f7ae59a2fb2d31be772eeb2205dc Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Thu, 11 Apr 2019 16:40:12 +0200 Subject: Ditch quick_error because it doesn't support generic parameters --- dhall/src/error.rs | 73 ++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 46 insertions(+), 27 deletions(-) (limited to 'dhall/src/error.rs') diff --git a/dhall/src/error.rs b/dhall/src/error.rs index cfd6f09..0a02816 100644 --- a/dhall/src/error.rs +++ b/dhall/src/error.rs @@ -1,32 +1,51 @@ -use quick_error::quick_error; - pub type Result = std::result::Result; -quick_error! { - #[derive(Debug)] - pub enum Error { - IO(err: std::io::Error) { - from() - display("{}", err) - } - Parse(err: dhall_core::ParseError) { - from() - display("{}", err) - } - Decode(err: crate::binary::DecodeError) { - from() - display("{:?}", err) - } - Resolve(err: crate::imports::ImportError) { - from() - display("{}", err) - } - Typecheck(err: crate::typecheck::TypeError) { - from() - display("{:?}", err) - } - Deserialize(err: String) { - display("{}", err) +#[derive(Debug)] +pub enum Error { + IO(std::io::Error), + Parse(dhall_core::ParseError), + Decode(crate::binary::DecodeError), + Resolve(crate::imports::ImportError), + Typecheck(crate::typecheck::TypeError), + Deserialize(String), +} + +impl std::fmt::Display for Error { + fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result { + match self { + Error::IO(err) => write!(f, "{}", err), + Error::Parse(err) => write!(f, "{}", err), + Error::Decode(err) => write!(f, "{:?}", err), + Error::Resolve(err) => write!(f, "{:?}", err), + Error::Typecheck(err) => write!(f, "{:?}", err), + Error::Deserialize(err) => write!(f, "{}", err), } } } + +impl std::error::Error for Error {} +impl From for Error { + fn from(err: std::io::Error) -> Error { + Error::IO(err) + } +} +impl From for Error { + fn from(err: dhall_core::ParseError) -> Error { + Error::Parse(err) + } +} +impl From for Error { + fn from(err: crate::binary::DecodeError) -> Error { + Error::Decode(err) + } +} +impl From for Error { + fn from(err: crate::imports::ImportError) -> Error { + Error::Resolve(err) + } +} +impl From> for Error { + fn from(err: crate::typecheck::TypeError) -> Error { + Error::Typecheck(err) + } +} -- cgit v1.2.3