mirror of
https://github.com/actix/actix-web.git
synced 2024-12-30 12:00:38 +00:00
Impl BodyEncoding for Response (#740)
This commit is contained in:
parent
c126713f40
commit
00526f60dc
3 changed files with 44 additions and 1 deletions
|
@ -189,6 +189,18 @@ impl<B> Response<B> {
|
||||||
self.head.keep_alive()
|
self.head.keep_alive()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Responses extensions
|
||||||
|
#[inline]
|
||||||
|
pub fn extensions(&self) -> Ref<Extensions> {
|
||||||
|
self.head.extensions.borrow()
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Mutable reference to a the response's extensions
|
||||||
|
#[inline]
|
||||||
|
pub fn extensions_mut(&mut self) -> RefMut<Extensions> {
|
||||||
|
self.head.extensions.borrow_mut()
|
||||||
|
}
|
||||||
|
|
||||||
/// Get body os this response
|
/// Get body os this response
|
||||||
#[inline]
|
#[inline]
|
||||||
pub fn body(&self) -> &ResponseBody<B> {
|
pub fn body(&self) -> &ResponseBody<B> {
|
||||||
|
|
|
@ -6,7 +6,7 @@ use std::str::FromStr;
|
||||||
use actix_http::body::MessageBody;
|
use actix_http::body::MessageBody;
|
||||||
use actix_http::encoding::Encoder;
|
use actix_http::encoding::Encoder;
|
||||||
use actix_http::http::header::{ContentEncoding, ACCEPT_ENCODING};
|
use actix_http::http::header::{ContentEncoding, ACCEPT_ENCODING};
|
||||||
use actix_http::ResponseBuilder;
|
use actix_http::{Response, ResponseBuilder};
|
||||||
use actix_service::{Service, Transform};
|
use actix_service::{Service, Transform};
|
||||||
use futures::future::{ok, FutureResult};
|
use futures::future::{ok, FutureResult};
|
||||||
use futures::{Async, Future, Poll};
|
use futures::{Async, Future, Poll};
|
||||||
|
@ -27,6 +27,13 @@ impl BodyEncoding for ResponseBuilder {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl<B> BodyEncoding for Response<B> {
|
||||||
|
fn encoding(&mut self, encoding: ContentEncoding) -> &mut Self {
|
||||||
|
self.extensions_mut().insert(Enc(encoding));
|
||||||
|
self
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
/// `Middleware` for compressing response body.
|
/// `Middleware` for compressing response body.
|
||||||
///
|
///
|
||||||
|
|
|
@ -96,10 +96,20 @@ fn test_body_encoding_override() {
|
||||||
.service(web::resource("/").route(web::to(|| {
|
.service(web::resource("/").route(web::to(|| {
|
||||||
use actix_web::middleware::encoding::BodyEncoding;
|
use actix_web::middleware::encoding::BodyEncoding;
|
||||||
Response::Ok().encoding(ContentEncoding::Deflate).body(STR)
|
Response::Ok().encoding(ContentEncoding::Deflate).body(STR)
|
||||||
|
})))
|
||||||
|
.service(web::resource("/raw").route(web::to(|| {
|
||||||
|
use actix_web::middleware::encoding::BodyEncoding;
|
||||||
|
let body = actix_web::dev::Body::Bytes(STR.into());
|
||||||
|
let mut response = Response::with_body(actix_web::http::StatusCode::OK, body);
|
||||||
|
|
||||||
|
response.encoding(ContentEncoding::Deflate);
|
||||||
|
|
||||||
|
response
|
||||||
}))),
|
}))),
|
||||||
)
|
)
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Builder
|
||||||
let mut response = srv.block_on(srv.get().no_decompress().send()).unwrap();
|
let mut response = srv.block_on(srv.get().no_decompress().send()).unwrap();
|
||||||
assert!(response.status().is_success());
|
assert!(response.status().is_success());
|
||||||
|
|
||||||
|
@ -111,6 +121,20 @@ fn test_body_encoding_override() {
|
||||||
e.write_all(bytes.as_ref()).unwrap();
|
e.write_all(bytes.as_ref()).unwrap();
|
||||||
let dec = e.finish().unwrap();
|
let dec = e.finish().unwrap();
|
||||||
assert_eq!(Bytes::from(dec), Bytes::from_static(STR.as_ref()));
|
assert_eq!(Bytes::from(dec), Bytes::from_static(STR.as_ref()));
|
||||||
|
|
||||||
|
// Raw Response
|
||||||
|
let mut response = srv.block_on(srv.request(actix_web::http::Method::GET, srv.url("/raw")).no_decompress().send()).unwrap();
|
||||||
|
assert!(response.status().is_success());
|
||||||
|
|
||||||
|
// read response
|
||||||
|
let bytes = srv.block_on(HttpMessageBody::new(&mut response)).unwrap();
|
||||||
|
|
||||||
|
// decode
|
||||||
|
let mut e = ZlibDecoder::new(Vec::new());
|
||||||
|
e.write_all(bytes.as_ref()).unwrap();
|
||||||
|
let dec = e.finish().unwrap();
|
||||||
|
assert_eq!(Bytes::from(dec), Bytes::from_static(STR.as_ref()));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#[cfg(any(feature = "flate2-zlib", feature = "flate2-rust"))]
|
#[cfg(any(feature = "flate2-zlib", feature = "flate2-rust"))]
|
||||||
|
|
Loading…
Reference in a new issue