mirror of https://github.com/fafhrd91/actix-web
static compat middleware future
This commit is contained in:
parent
07036b5640
commit
73b89d6f58
|
@ -8,7 +8,7 @@ use std::{
|
||||||
|
|
||||||
use actix_http::body::{Body, MessageBody, ResponseBody};
|
use actix_http::body::{Body, MessageBody, ResponseBody};
|
||||||
use actix_service::{Service, Transform};
|
use actix_service::{Service, Transform};
|
||||||
use futures_core::{future::LocalBoxFuture, ready};
|
use futures_core::ready;
|
||||||
|
|
||||||
use crate::{error::Error, service::ServiceResponse};
|
use crate::{error::Error, service::ServiceResponse};
|
||||||
|
|
||||||
|
@ -55,14 +55,30 @@ where
|
||||||
type Error = Error;
|
type Error = Error;
|
||||||
type Transform = CompatMiddleware<T::Transform>;
|
type Transform = CompatMiddleware<T::Transform>;
|
||||||
type InitError = T::InitError;
|
type InitError = T::InitError;
|
||||||
type Future = LocalBoxFuture<'static, Result<Self::Transform, Self::InitError>>;
|
type Future = CompatFut<T::Future>;
|
||||||
|
|
||||||
fn new_transform(&self, service: S) -> Self::Future {
|
fn new_transform(&self, service: S) -> Self::Future {
|
||||||
let fut = self.transform.new_transform(service);
|
CompatFut {
|
||||||
Box::pin(async move {
|
fut: self.transform.new_transform(service),
|
||||||
let service = fut.await?;
|
}
|
||||||
Ok(CompatMiddleware { service })
|
}
|
||||||
})
|
}
|
||||||
|
|
||||||
|
#[pin_project::pin_project]
|
||||||
|
pub struct CompatFut<F> {
|
||||||
|
#[pin]
|
||||||
|
fut: F,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl<T, TE, F> Future for CompatFut<F>
|
||||||
|
where
|
||||||
|
F: Future<Output = Result<T, TE>>,
|
||||||
|
{
|
||||||
|
type Output = Result<CompatMiddleware<T>, TE>;
|
||||||
|
|
||||||
|
fn poll(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Self::Output> {
|
||||||
|
let service = ready!(self.project().fut.poll(cx))?;
|
||||||
|
Poll::Ready(Ok(CompatMiddleware { service }))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue