diff options
author | Ryan Dahl <ry@tinyclouds.org> | 2018-08-14 16:50:53 -0400 |
---|---|---|
committer | Ryan Dahl <ry@tinyclouds.org> | 2018-08-23 09:41:08 -0400 |
commit | e2f9b0e6fd01c4ad8d7fc966a531e48e5aaa334f (patch) | |
tree | 8d32626de78163586ca5888d7ea534e7c7861214 /src/errors.rs | |
parent | 242e68e50c0ce6890c4b7812a751656b5d43d641 (diff) |
First pass at HTTP imports
Implement --reload
Integrate hyper errors into DenoError
In collaboration with Tommy Savaria <tommy.savaria@protonmail.ch>
Diffstat (limited to 'src/errors.rs')
-rw-r--r-- | src/errors.rs | 42 |
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), + } + } +} |