Added support for encoded payload

Actix provides different content encodings out of the box, but only if we use built-in content wrappers and containers. This patch wraps its own Payload implementation with an actix decoder, which enables request compression support.
This commit is contained in:
Andrey "MOU" Larionov 2022-10-09 21:55:14 +02:00
parent 11b986a81d
commit 9dbc71cb6d
No known key found for this signature in database
GPG key ID: 5FF293FC94C01D6A
3 changed files with 138 additions and 2 deletions

View file

@ -1,13 +1,14 @@
use std::pin::Pin;
use std::task::{Context, Poll};
use actix_http::encoding::Decoder as Decompress;
use actix_web::error::PayloadError;
use actix_web::{dev, web, FromRequest, HttpRequest};
use futures::future::{ready, Ready};
use futures::Stream;
pub struct Payload {
payload: dev::Payload,
payload: Decompress<dev::Payload>,
limit: usize,
}
@ -39,7 +40,7 @@ impl FromRequest for Payload {
.map(|c| c.limit)
.unwrap_or(PayloadConfig::default().limit);
ready(Ok(Payload {
payload: payload.take(),
payload: Decompress::from_headers(payload.take(), req.headers()),
limit,
}))
}