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