use ::http::Uri;
use bytes::Bytes;
use super::meta::ResponseMeta;
pub type Response<B = Bytes> = ::http::Response<B>;
pub trait ResponseExt {
fn final_uri(&self) -> Option<&Uri>;
fn set_final_uri(&mut self, uri: Uri);
}
impl<B> ResponseExt for ::http::Response<B> {
fn final_uri(&self) -> Option<&Uri> {
self.extensions().get::<ResponseMeta>()?.final_uri.as_ref()
}
fn set_final_uri(&mut self, uri: Uri) {
let meta = self
.extensions_mut()
.get_or_insert_default::<ResponseMeta>();
meta.final_uri = Some(uri);
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn response_final_uri() {
let mut response = Response::new(());
assert_eq!(response.final_uri(), None);
response.set_final_uri(Uri::from_static("https://example.com/moved"));
assert_eq!(response.final_uri().unwrap(), "https://example.com/moved");
}
}