tower_web/middleware/deflate/
middleware.rs

1use 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/// Deflate all response bodies
11#[derive(Debug)]
12pub struct DeflateMiddleware {
13    level: Compression,
14}
15
16impl DeflateMiddleware {
17    /// Create a new `DeflateMiddleware` instance
18    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