tower_web/middleware/deflate/
middleware.rs1use super::DeflateService;
2use middleware::Middleware;
3use util::buf_stream::BufStream;
4use util::buf_stream::deflate::CompressStream;
5
6use flate2::Compression;
7use http;
8use tower_service::Service;
9
10#[derive(Debug)]
12pub struct DeflateMiddleware {
13 level: Compression,
14}
15
16impl DeflateMiddleware {
17 pub fn new(level: Compression) -> DeflateMiddleware {
19 DeflateMiddleware { level }
20 }
21}
22
23impl<S, RequestBody, ResponseBody> Middleware<S> for DeflateMiddleware
24where S: Service<Request = http::Request<RequestBody>,
25 Response = http::Response<ResponseBody>>,
26 RequestBody: BufStream,
27 ResponseBody: BufStream,
28 S::Error: ::std::error::Error,
29{
30 type Request = http::Request<RequestBody>;
31 type Response = http::Response<CompressStream<ResponseBody>>;
32 type Error = S::Error;
33 type Service = DeflateService<S>;
34
35 fn wrap(&self, service: S) -> Self::Service {
36 DeflateService::new(service, self.level)
37 }
38}
39