//! Chain service for decompressing request payload. use std::marker::PhantomData; use actix_http::encoding::Decoder; use actix_service::{NewService, Service}; use bytes::Bytes; use futures::future::{ok, FutureResult}; use futures::{Async, Poll, Stream}; use crate::dev::Payload; use crate::error::{Error, PayloadError}; use crate::service::ServiceRequest; use crate::HttpMessage; /// `Middleware` for decompressing request's payload. /// `Decompress` middleware must be added with `App::chain()` method. /// /// ```rust /// use actix_web::{web, middleware::encoding, App, HttpResponse}; /// /// fn main() { /// let app = App::new() /// .chain(encoding::Decompress::new()) /// .service( /// web::resource("/test") /// .route(web::get().to(|| HttpResponse::Ok())) /// .route(web::head().to(|| HttpResponse::MethodNotAllowed())) /// ); /// } /// ``` pub struct Decompress
(PhantomData
); impl
Decompress
where
P: Stream NewService for Decompress
where
P: Stream ;
type Response = ServiceRequest ;
type Future = FutureResult Service for Decompress
where
P: Stream ;
type Response = ServiceRequest ) -> Self::Future {
let (req, payload) = req.into_parts();
let payload = Decoder::from_headers(req.headers(), payload);
ok(ServiceRequest::from_parts(req, Payload::Stream(payload)))
}
}