From e2f9b0e6fd01c4ad8d7fc966a531e48e5aaa334f Mon Sep 17 00:00:00 2001 From: Ryan Dahl Date: Tue, 14 Aug 2018 16:50:53 -0400 Subject: First pass at HTTP imports Implement --reload Integrate hyper errors into DenoError In collaboration with Tommy Savaria --- src/errors.rs | 42 +++++++++++++++++++++++++++++++++++------- 1 file changed, 35 insertions(+), 7 deletions(-) (limited to 'src/errors.rs') 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 for DenoError { } } } + +impl From for DenoError { + #[inline] + fn from(err: hyper::Error) -> DenoError { + DenoError { + repr: Repr::HyperErr(err), + } + } +} -- cgit v1.2.3