summaryrefslogtreecommitdiff
path: root/dhall/src/error.rs
diff options
context:
space:
mode:
Diffstat (limited to 'dhall/src/error.rs')
-rw-r--r--dhall/src/error.rs73
1 files changed, 46 insertions, 27 deletions
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<T> = std::result::Result<T, Error>;
-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<dhall_core::X>) {
- 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<dhall_core::X>),
+ 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<std::io::Error> for Error {
+ fn from(err: std::io::Error) -> Error {
+ Error::IO(err)
+ }
+}
+impl From<dhall_core::ParseError> for Error {
+ fn from(err: dhall_core::ParseError) -> Error {
+ Error::Parse(err)
+ }
+}
+impl From<crate::binary::DecodeError> for Error {
+ fn from(err: crate::binary::DecodeError) -> Error {
+ Error::Decode(err)
+ }
+}
+impl From<crate::imports::ImportError> for Error {
+ fn from(err: crate::imports::ImportError) -> Error {
+ Error::Resolve(err)
+ }
+}
+impl From<crate::typecheck::TypeError<dhall_core::X>> for Error {
+ fn from(err: crate::typecheck::TypeError<dhall_core::X>) -> Error {
+ Error::Typecheck(err)
+ }
+}