Skip to content

Commit

Permalink
feat(encoding): use an extension for encoding, which allow a specific…
Browse files Browse the repository at this point in the history
… handler to disable compression if needed
  • Loading branch information
joelwurtz committed Dec 16, 2024
1 parent 8115c81 commit 0cb453e
Showing 1 changed file with 30 additions and 9 deletions.
39 changes: 30 additions & 9 deletions actix-web/src/middleware/compress.rs
Original file line number Diff line number Diff line change
Expand Up @@ -110,14 +110,22 @@ where

#[allow(clippy::borrow_interior_mutable_const)]
fn call(&self, req: ServiceRequest) -> Self::Future {
if req.extensions().get::<Encoding>().is_some() {
return Either::left(CompressResponse {
fut: self.service.call(req),
_phantom: PhantomData,
});
}

// negotiate content-encoding
let accept_encoding = req.get_header::<AcceptEncoding>();

let accept_encoding = match accept_encoding {

Check warning on line 123 in actix-web/src/middleware/compress.rs

View workflow job for this annotation

GitHub Actions / fmt

Diff in /home/runner/work/actix-web/actix-web/actix-web/src/middleware/compress.rs
// missing header; fallback to identity
None => {
req.extensions_mut().insert::<Encoding>(Encoding::identity());

return Either::left(CompressResponse {
encoding: Encoding::identity(),
fut: self.service.call(req),
_phantom: PhantomData,

Check warning on line 130 in actix-web/src/middleware/compress.rs

View workflow job for this annotation

GitHub Actions / fmt

Diff in /home/runner/work/actix-web/actix-web/actix-web/src/middleware/compress.rs
})
Expand All @@ -143,11 +151,14 @@ where
.map_into_right_body()))
}

Some(encoding) => Either::left(CompressResponse {
fut: self.service.call(req),
encoding,
_phantom: PhantomData,
}),
Some(encoding) => {
req.extensions_mut().insert::<Encoding>(encoding);

Either::left(CompressResponse {
fut: self.service.call(req),

Check warning on line 158 in actix-web/src/middleware/compress.rs

View workflow job for this annotation

GitHub Actions / fmt

Diff in /home/runner/work/actix-web/actix-web/actix-web/src/middleware/compress.rs
_phantom: PhantomData,
})
},
}
}
}
Expand All @@ -159,7 +170,6 @@ pin_project! {
{
#[pin]
fut: S::Future,
encoding: Encoding,
_phantom: PhantomData<B>,
}
}
Expand All @@ -176,8 +186,19 @@ where

match ready!(this.fut.poll(cx)) {
Ok(resp) => {
let enc = match this.encoding {
Encoding::Known(enc) => *enc,
let request_encoding = resp.request().extensions().get::<Encoding>().cloned();

let encoding = match request_encoding {
Some(enc) => enc.clone(),

Check warning on line 192 in actix-web/src/middleware/compress.rs

View workflow job for this annotation

GitHub Actions / fmt

Diff in /home/runner/work/actix-web/actix-web/actix-web/src/middleware/compress.rs
None => {
return Poll::Ready(Ok(resp.map_body(move |head, body| {
EitherBody::left(Encoder::response(ContentEncoding::Identity, head, body))
})));
}
};

let enc = match encoding {
Encoding::Known(enc) => enc,
Encoding::Unknown(enc) => {
unimplemented!("encoding '{enc}' should not be here");
}
Expand Down

0 comments on commit 0cb453e

Please sign in to comment.