1use url::Url;
2
3#[derive(Debug, Clone, PartialEq)]
4pub(crate) struct ResponseUrl(pub Url);
5
6/// Extension trait for http::response::Builder objects
7///
8/// Allows the user to add a `Url` to the http::Response
9pub trait ResponseBuilderExt {
10 /// A builder method for the `http::response::Builder` type that allows the user to add a `Url`
11 /// to the `http::Response`
12 fn url(self, url: Url) -> Self;
13}
14
15impl ResponseBuilderExt for http::response::Builder {
16 fn url(self, url: Url) -> Self {
17 self.extension(ResponseUrl(url))
18 }
19}
20
21#[cfg(test)]
22mod tests {
23 use super::{ResponseBuilderExt, ResponseUrl};
24 use http::response::Builder;
25 use url::Url;
26
27 #[test]
28 fn test_response_builder_ext() {
29 let url = Url::parse("http://example.com").unwrap();
30 let response = Builder::new()
31 .status(200)
32 .url(url.clone())
33 .body(())
34 .unwrap();
35
36 assert_eq!(
37 response.extensions().get::<ResponseUrl>(),
38 Some(&ResponseUrl(url))
39 );
40 }
41}
42