Make ResponseBuilderExt not target-dependent
This commit is contained in:
committed by
Sean McArthur
parent
3879694c09
commit
1be9c34f01
@@ -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;
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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
41
src/response.rs
Normal 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))
|
||||
);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user