use rocket::response::{self, Responder, Response};
use rocket::Request;
use super::CompressionUtils;
#[derive(Debug)]
pub struct Compress<R>(pub R, pub async_compression::Level);
impl<'r, 'o: 'r, R: Responder<'r, 'o>> Compress<R> {
pub fn default(r: R) -> Compress<R> {
Compress(r, async_compression::Level::Default)
}
pub fn best(r: R) -> Compress<R> {
Compress(r, async_compression::Level::Best)
}
pub fn fastest(r: R) -> Compress<R> {
Compress(r, async_compression::Level::Fastest)
}
}
impl<'r, 'o: 'r, R: Responder<'r, 'o>> Responder<'r, 'o> for Compress<R> {
#[inline(always)]
fn respond_to(self, request: &'r Request<'_>) -> response::Result<'o> {
let mut response = Response::build()
.merge(self.0.respond_to(request)?)
.finalize();
CompressionUtils::compress_response(request, &mut response, &[], self.1);
Ok(response)
}
}