diff --git a/crates/auth/src/extractor.rs b/crates/auth/src/extractor.rs index 8530d6a..877a84f 100644 --- a/crates/auth/src/extractor.rs +++ b/crates/auth/src/extractor.rs @@ -1,6 +1,8 @@ use actix_web::{dev::Payload, web::Data, FromRequest, HttpRequest}; -use futures_util::Future; -use std::{marker::PhantomData, task::Poll}; +use std::{ + future::{ready, Ready}, + marker::PhantomData, +}; use crate::error::Error; @@ -20,35 +22,19 @@ impl From for AuthInfoExtractor { } } -pub struct AuthInfoExtractorFuture(Result, PhantomData); - -impl Future for AuthInfoExtractorFuture { - type Output = Result, Error>; - - fn poll( - self: std::pin::Pin<&mut Self>, - _cx: &mut std::task::Context<'_>, - ) -> std::task::Poll { - match &self.0 { - Ok(auth_info) => Poll::Ready(Ok(AuthInfoExtractor { - inner: auth_info.clone(), - _provider_type: PhantomData, - })), - Err(err) => Poll::Ready(Err(err.clone())), - } - } -} - impl FromRequest for AuthInfoExtractor where A: CheckAuthentication, { type Error = Error; - type Future = AuthInfoExtractorFuture; + type Future = Ready>; fn extract(req: &HttpRequest) -> Self::Future { let result = req.app_data::>().unwrap().validate(req); - AuthInfoExtractorFuture(result, PhantomData) + ready(result.map(|auth_info| Self { + inner: auth_info, + _provider_type: PhantomData, + })) } fn from_request(req: &HttpRequest, _payload: &mut Payload) -> Self::Future { Self::extract(req)