diff --git a/src/httpresponse.rs b/src/httpresponse.rs index ab06adfe7..326281f78 100644 --- a/src/httpresponse.rs +++ b/src/httpresponse.rs @@ -18,6 +18,8 @@ use error::Error; use handler::Responder; use header::{Header, IntoHeaderValue, ContentEncoding}; use httprequest::HttpRequest; +use httpmessage::HttpMessage; +use client::ClientResponse; /// max write buffer size 64k pub(crate) const MAX_WRITE_BUFFER_SIZE: usize = 65_536; @@ -722,6 +724,20 @@ impl Responder for BytesMut { } } +/// Create `HttpResponseBuilder` from `ClientResponse` +/// +/// It is useful for proxy response. This implementation +/// copies all responses's headers and status. +impl<'a> From<&'a ClientResponse> for HttpResponseBuilder { + fn from(resp: &'a ClientResponse) -> HttpResponseBuilder { + let mut builder = HttpResponse::build(resp.status()); + for (key, value) in resp.headers() { + builder.header(key.clone(), value.clone()); + } + builder + } +} + #[derive(Debug)] struct InnerHttpResponse { version: Option,