Skip to content

Commit

Permalink
Make ResponseBuilderExt not target-dependent
Browse files Browse the repository at this point in the history
  • Loading branch information
jplatte authored and seanmonstar committed Aug 26, 2021
1 parent 3879694 commit 1be9c34
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 38 deletions.
2 changes: 1 addition & 1 deletion src/async_impl/mod.rs
Original file line number Diff line number Diff line change
@@ -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;
Expand Down
41 changes: 5 additions & 36 deletions src/async_impl/response.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down Expand Up @@ -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();
Expand All @@ -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);
}
}
4 changes: 3 additions & 1 deletion src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
///
Expand Down Expand Up @@ -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")]
Expand Down
41 changes: 41 additions & 0 deletions src/response.rs
Original file line number Diff line number Diff line change
@@ -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))
);
}
}

0 comments on commit 1be9c34

Please sign in to comment.