Make ResponseBuilderExt not target-dependent

This commit is contained in:
Jonas Platte
2021-08-25 10:57:10 +02:00
committed by Sean McArthur
parent 3879694c09
commit 1be9c34f01
4 changed files with 50 additions and 38 deletions

View File

@@ -1,7 +1,7 @@
pub use self::body::Body;
pub use self::client::{Client, ClientBuilder};
pub use self::request::{Request, RequestBuilder};
pub use self::response::{Response, ResponseBuilderExt};
pub use self::response::Response;
#[cfg(feature = "blocking")]
pub(crate) use self::decoder::Decoder;

View File

@@ -20,6 +20,7 @@ use super::body::Body;
use super::decoder::{Accepts, Decoder};
#[cfg(feature = "cookies")]
use crate::cookie;
use crate::response::ResponseUrl;
/// A Response to a submitted `Request`.
pub struct Response {
@@ -426,45 +427,13 @@ impl From<Response> for Body {
}
}
#[derive(Debug, Clone, PartialEq)]
struct ResponseUrl(Url);
/// Extension trait for http::response::Builder objects
///
/// Allows the user to add a `Url` to the http::Response
pub trait ResponseBuilderExt {
/// A builder method for the `http::response::Builder` type that allows the user to add a `Url`
/// to the `http::Response`
fn url(self, url: Url) -> Self;
}
impl ResponseBuilderExt for http::response::Builder {
fn url(self, url: Url) -> Self {
self.extension(ResponseUrl(url))
}
}
#[cfg(test)]
mod tests {
use super::{Response, ResponseBuilderExt, ResponseUrl};
use super::Response;
use crate::ResponseBuilderExt;
use http::response::Builder;
use url::Url;
#[test]
fn test_response_builder_ext() {
let url = Url::parse("http://example.com").unwrap();
let response = Builder::new()
.status(200)
.url(url.clone())
.body(())
.unwrap();
assert_eq!(
response.extensions().get::<ResponseUrl>(),
Some(&ResponseUrl(url))
);
}
#[test]
fn test_from_http_response() {
let url = Url::parse("http://example.com").unwrap();
@@ -475,7 +444,7 @@ mod tests {
.unwrap();
let response = Response::from(response);
assert_eq!(response.status, 200);
assert_eq!(response.url, Box::new(url));
assert_eq!(response.status(), 200);
assert_eq!(*response.url(), url);
}
}

View File

@@ -226,9 +226,11 @@ pub use url::Url;
#[macro_use]
mod error;
mod into_url;
mod response;
pub use self::error::{Error, Result};
pub use self::into_url::IntoUrl;
pub use self::response::ResponseBuilderExt;
/// Shortcut method to quickly make a `GET` request.
///
@@ -294,7 +296,7 @@ if_hyper! {
doctest!("../README.md");
pub use self::async_impl::{
Body, Client, ClientBuilder, Request, RequestBuilder, Response, ResponseBuilderExt,
Body, Client, ClientBuilder, Request, RequestBuilder, Response,
};
pub use self::proxy::Proxy;
#[cfg(feature = "__tls")]

41
src/response.rs Normal file
View File

@@ -0,0 +1,41 @@
use url::Url;
#[derive(Debug, Clone, PartialEq)]
pub(crate) struct ResponseUrl(pub Url);
/// Extension trait for http::response::Builder objects
///
/// Allows the user to add a `Url` to the http::Response
pub trait ResponseBuilderExt {
/// A builder method for the `http::response::Builder` type that allows the user to add a `Url`
/// to the `http::Response`
fn url(self, url: Url) -> Self;
}
impl ResponseBuilderExt for http::response::Builder {
fn url(self, url: Url) -> Self {
self.extension(ResponseUrl(url))
}
}
#[cfg(test)]
mod tests {
use super::{ResponseBuilderExt, ResponseUrl};
use http::response::Builder;
use url::Url;
#[test]
fn test_response_builder_ext() {
let url = Url::parse("http://example.com").unwrap();
let response = Builder::new()
.status(200)
.url(url.clone())
.body(())
.unwrap();
assert_eq!(
response.extensions().get::<ResponseUrl>(),
Some(&ResponseUrl(url))
);
}
}