combine ClientError and ServerError into Status kind

This commit is contained in:
Sean McArthur
2019-04-25 10:54:55 -07:00
parent 45484d8077
commit 29f7fa74cc
2 changed files with 30 additions and 33 deletions

View File

@@ -170,10 +170,8 @@ impl Response {
/// ``` /// ```
#[inline] #[inline]
pub fn error_for_status(self) -> ::Result<Self> { pub fn error_for_status(self) -> ::Result<Self> {
if self.status.is_client_error() { if self.status.is_client_error() || self.status.is_server_error() {
Err(::error::client_error(*self.url, self.status)) Err(::error::status_code(*self.url, self.status))
} else if self.status.is_server_error() {
Err(::error::server_error(*self.url, self.status))
} else { } else {
Ok(self) Ok(self)
} }
@@ -202,10 +200,8 @@ impl Response {
/// ``` /// ```
#[inline] #[inline]
pub fn error_for_status_ref(&self) -> ::Result<&Self> { pub fn error_for_status_ref(&self) -> ::Result<&Self> {
if self.status.is_client_error() { if self.status.is_client_error() || self.status.is_server_error() {
Err(::error::client_error(*self.url.clone(), self.status)) Err(::error::status_code(*self.url.clone(), self.status))
} else if self.status.is_server_error() {
Err(::error::server_error(*self.url.clone(), self.status))
} else { } else {
Ok(self) Ok(self)
} }

View File

@@ -148,8 +148,7 @@ impl Error {
Kind::UrlBadScheme | Kind::UrlBadScheme |
Kind::TooManyRedirects | Kind::TooManyRedirects |
Kind::RedirectLoop | Kind::RedirectLoop |
Kind::ClientError(_) | Kind::Status(_) |
Kind::ServerError(_) |
Kind::UnknownProxyScheme | Kind::UnknownProxyScheme |
Kind::Timer => None, Kind::Timer => None,
} }
@@ -206,7 +205,7 @@ impl Error {
#[inline] #[inline]
pub fn is_client_error(&self) -> bool { pub fn is_client_error(&self) -> bool {
match self.inner.kind { match self.inner.kind {
Kind::ClientError(_) => true, Kind::Status(code) => code.is_client_error(),
_ => false, _ => false,
} }
} }
@@ -215,7 +214,7 @@ impl Error {
#[inline] #[inline]
pub fn is_server_error(&self) -> bool { pub fn is_server_error(&self) -> bool {
match self.inner.kind { match self.inner.kind {
Kind::ServerError(_) => true, Kind::Status(code) => code.is_server_error(),
_ => false, _ => false,
} }
} }
@@ -224,8 +223,7 @@ impl Error {
#[inline] #[inline]
pub fn status(&self) -> Option<StatusCode> { pub fn status(&self) -> Option<StatusCode> {
match self.inner.kind { match self.inner.kind {
Kind::ClientError(code) | Kind::Status(code) => Some(code),
Kind::ServerError(code) => Some(code),
_ => None, _ => None,
} }
} }
@@ -273,13 +271,15 @@ impl fmt::Display for Error {
Kind::Json(ref e) => fmt::Display::fmt(e, f), Kind::Json(ref e) => fmt::Display::fmt(e, f),
Kind::TooManyRedirects => f.write_str("Too many redirects"), Kind::TooManyRedirects => f.write_str("Too many redirects"),
Kind::RedirectLoop => f.write_str("Infinite redirect loop"), Kind::RedirectLoop => f.write_str("Infinite redirect loop"),
Kind::ClientError(ref code) => { Kind::Status(ref code) => {
f.write_str("Client Error: ")?; let prefix = if code.is_client_error() {
fmt::Display::fmt(code, f) "Client Error"
} } else if code.is_server_error() {
Kind::ServerError(ref code) => { "Server Error"
f.write_str("Server Error: ")?; } else {
fmt::Display::fmt(code, f) unreachable!("non-error status code: {:?}", code);
};
write!(f, "{}: {}", prefix, code)
} }
Kind::UnknownProxyScheme => f.write_str("Unknown proxy scheme"), Kind::UnknownProxyScheme => f.write_str("Unknown proxy scheme"),
Kind::Timer => f.write_str("timer unavailable"), Kind::Timer => f.write_str("timer unavailable"),
@@ -308,8 +308,15 @@ impl StdError for Error {
Kind::Json(ref e) => e.description(), Kind::Json(ref e) => e.description(),
Kind::TooManyRedirects => "Too many redirects", Kind::TooManyRedirects => "Too many redirects",
Kind::RedirectLoop => "Infinite redirect loop", Kind::RedirectLoop => "Infinite redirect loop",
Kind::ClientError(_) => "Client Error", Kind::Status(code) => {
Kind::ServerError(_) => "Server Error", if code.is_client_error() {
"Client Error"
} else if code.is_server_error() {
"Server Error"
} else {
unreachable!("non-error status code: {:?}", code);
}
}
Kind::UnknownProxyScheme => "Unknown proxy scheme", Kind::UnknownProxyScheme => "Unknown proxy scheme",
Kind::Timer => "timer unavailable", Kind::Timer => "timer unavailable",
} }
@@ -335,8 +342,7 @@ impl StdError for Error {
Kind::UrlBadScheme | Kind::UrlBadScheme |
Kind::TooManyRedirects | Kind::TooManyRedirects |
Kind::RedirectLoop | Kind::RedirectLoop |
Kind::ClientError(_) | Kind::Status(_) |
Kind::ServerError(_) |
Kind::UnknownProxyScheme | Kind::UnknownProxyScheme |
Kind::Timer => None, Kind::Timer => None,
} }
@@ -363,8 +369,7 @@ pub(crate) enum Kind {
Json(::serde_json::Error), Json(::serde_json::Error),
TooManyRedirects, TooManyRedirects,
RedirectLoop, RedirectLoop,
ClientError(StatusCode), Status(StatusCode),
ServerError(StatusCode),
UnknownProxyScheme, UnknownProxyScheme,
Timer, Timer,
} }
@@ -547,12 +552,8 @@ pub(crate) fn timedout(url: Option<Url>) -> Error {
Error::new(Kind::Io(io_timeout()), url) Error::new(Kind::Io(io_timeout()), url)
} }
pub(crate) fn client_error(url: Url, status: StatusCode) -> Error { pub(crate) fn status_code(url: Url, status: StatusCode) -> Error {
Error::new(Kind::ClientError(status), Some(url)) Error::new(Kind::Status(status), Some(url))
}
pub(crate) fn server_error(url: Url, status: StatusCode) -> Error {
Error::new(Kind::ServerError(status), Some(url))
} }
pub(crate) fn url_bad_scheme(url: Url) -> Error { pub(crate) fn url_bad_scheme(url: Url) -> Error {