From 18a9b0897358b88e7930dca02e7ca5f8e789783a Mon Sep 17 00:00:00 2001 From: Jacob Hoffman-Andrews Date: Wed, 2 Dec 2020 00:10:36 -0800 Subject: [PATCH] Revert deletions of client_error and friends. --- src/request.rs | 4 ++-- src/response.rs | 24 ++++++++++++++++++++++++ src/test/simple.rs | 1 + src/unit.rs | 2 +- 4 files changed, 28 insertions(+), 3 deletions(-) diff --git a/src/request.rs b/src/request.rs index 792632e..18a882a 100644 --- a/src/request.rs +++ b/src/request.rs @@ -121,8 +121,8 @@ impl Request { let response = unit::connect(unit, true, 0, reader, false).map_err(|e| e.url(url.clone()))?; - if self.error_on_non_2xx && response.status() >= 400 { - Err(Error::Status(response.status(), response)) + if response.error() && self.error_on_non_2xx { + Err(ErrorKind::HTTP.new().url(url.clone()).response(response)) } else { Ok(response) } diff --git a/src/response.rs b/src/response.rs index 1906995..e17bf32 100644 --- a/src/response.rs +++ b/src/response.rs @@ -145,6 +145,30 @@ impl Response { .collect() } + /// Whether the response status is: 200 <= status <= 299 + pub fn ok(&self) -> bool { + self.status >= 200 && self.status <= 299 + } + + pub fn redirect(&self) -> bool { + self.status >= 300 && self.status <= 399 + } + + /// Whether the response status is: 400 <= status <= 499 + pub fn client_error(&self) -> bool { + self.status >= 400 && self.status <= 499 + } + + /// Whether the response status is: 500 <= status <= 599 + pub fn server_error(&self) -> bool { + self.status >= 500 && self.status <= 599 + } + + /// Whether the response status is: 400 <= status <= 599 + pub fn error(&self) -> bool { + self.client_error() || self.server_error() + } + /// The content type part of the "Content-Type" header without /// the charset. /// diff --git a/src/test/simple.rs b/src/test/simple.rs index 842bc37..5a45e78 100644 --- a/src/test/simple.rs +++ b/src/test/simple.rs @@ -175,6 +175,7 @@ pub fn no_status_text() { test::make_response(200, "", vec![], vec![]) }); let resp = get("test://host/no_status_text").call().unwrap(); + assert!(resp.ok()); assert_eq!(resp.status(), 200); } diff --git a/src/unit.rs b/src/unit.rs index 720b422..934b6db 100644 --- a/src/unit.rs +++ b/src/unit.rs @@ -231,7 +231,7 @@ pub(crate) fn connect( save_cookies(&unit, &resp); // handle redirects - if resp.status() >= 300 && resp.status() < 400 && unit.agent.config.redirects > 0 { + if resp.redirect() && unit.agent.config.redirects > 0 { if redirect_count == unit.agent.config.redirects { return Err(ErrorKind::TooManyRedirects.new()); }