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::(), Some(&ResponseUrl(url)) ); } }