combine ClientError and ServerError into Status kind
This commit is contained in:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
51
src/error.rs
51
src/error.rs
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user