summaryrefslogtreecommitdiff
path: root/src/errors.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/errors.rs')
-rw-r--r--src/errors.rs42
1 files changed, 35 insertions, 7 deletions
diff --git a/src/errors.rs b/src/errors.rs
index f556ba1c2..2fcb26193 100644
--- a/src/errors.rs
+++ b/src/errors.rs
@@ -1,4 +1,5 @@
// Copyright 2018 the Deno authors. All rights reserved. MIT license.
+use hyper;
use msg_generated::deno as msg;
use std;
use std::fmt;
@@ -14,6 +15,14 @@ pub struct DenoError {
repr: Repr,
}
+#[derive(Debug)]
+enum Repr {
+ // Simple(ErrorKind),
+ IoErr(io::Error),
+ UrlErr(url::ParseError),
+ HyperErr(hyper::Error),
+}
+
impl DenoError {
pub fn kind(&self) -> ErrorKind {
match self.repr {
@@ -59,22 +68,30 @@ impl DenoError {
Overflow => ErrorKind::Overflow,
}
}
+ Repr::HyperErr(ref err) => {
+ // For some reason hyper::errors::Kind is private.
+ if err.is_parse() {
+ ErrorKind::HttpParse
+ } else if err.is_user() {
+ ErrorKind::HttpUser
+ } else if err.is_canceled() {
+ ErrorKind::HttpCanceled
+ } else if err.is_closed() {
+ ErrorKind::HttpClosed
+ } else {
+ ErrorKind::HttpOther
+ }
+ }
}
}
}
-#[derive(Debug)]
-enum Repr {
- // Simple(ErrorKind),
- IoErr(io::Error),
- UrlErr(url::ParseError),
-}
-
impl fmt::Display for DenoError {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
match self.repr {
Repr::IoErr(ref err) => err.fmt(f),
Repr::UrlErr(ref err) => err.fmt(f),
+ Repr::HyperErr(ref err) => err.fmt(f),
// Repr::Simple(..) => Ok(()),
}
}
@@ -85,6 +102,7 @@ impl std::error::Error for DenoError {
match self.repr {
Repr::IoErr(ref err) => err.description(),
Repr::UrlErr(ref err) => err.description(),
+ Repr::HyperErr(ref err) => err.description(),
// Repr::Simple(..) => "FIXME",
}
}
@@ -93,6 +111,7 @@ impl std::error::Error for DenoError {
match self.repr {
Repr::IoErr(ref err) => Some(err),
Repr::UrlErr(ref err) => Some(err),
+ Repr::HyperErr(ref err) => Some(err),
// Repr::Simple(..) => None,
}
}
@@ -115,3 +134,12 @@ impl From<url::ParseError> for DenoError {
}
}
}
+
+impl From<hyper::Error> for DenoError {
+ #[inline]
+ fn from(err: hyper::Error) -> DenoError {
+ DenoError {
+ repr: Repr::HyperErr(err),
+ }
+ }
+}