Make Middleware always Send + Sync + 'static
This commit is contained in:
@@ -43,7 +43,7 @@ pub struct AgentBuilder {
|
|||||||
#[cfg(feature = "cookies")]
|
#[cfg(feature = "cookies")]
|
||||||
cookie_store: Option<CookieStore>,
|
cookie_store: Option<CookieStore>,
|
||||||
resolver: ArcResolver,
|
resolver: ArcResolver,
|
||||||
middleware: Vec<Box<dyn Middleware + Send + Sync>>,
|
middleware: Vec<Box<dyn Middleware>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Config as built by AgentBuilder and then static for the lifetime of the Agent.
|
/// Config as built by AgentBuilder and then static for the lifetime of the Agent.
|
||||||
@@ -111,7 +111,7 @@ pub(crate) struct AgentState {
|
|||||||
#[cfg(feature = "cookies")]
|
#[cfg(feature = "cookies")]
|
||||||
pub(crate) cookie_tin: CookieTin,
|
pub(crate) cookie_tin: CookieTin,
|
||||||
pub(crate) resolver: ArcResolver,
|
pub(crate) resolver: ArcResolver,
|
||||||
pub(crate) middleware: Vec<Box<dyn Middleware + Send + Sync>>,
|
pub(crate) middleware: Vec<Box<dyn Middleware>>,
|
||||||
}
|
}
|
||||||
|
|
||||||
impl Agent {
|
impl Agent {
|
||||||
@@ -601,7 +601,7 @@ impl AgentBuilder {
|
|||||||
///
|
///
|
||||||
/// All requests made by the agent will use this middleware. Middleware is invoked
|
/// All requests made by the agent will use this middleware. Middleware is invoked
|
||||||
/// in the order they are added to the builder.
|
/// in the order they are added to the builder.
|
||||||
pub fn middleware(mut self, m: impl Middleware + Send + Sync + 'static) -> Self {
|
pub fn middleware(mut self, m: impl Middleware) -> Self {
|
||||||
self.middleware.push(Box::new(m));
|
self.middleware.push(Box::new(m));
|
||||||
self
|
self
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -126,7 +126,7 @@ use crate::{Error, Request, Response};
|
|||||||
///
|
///
|
||||||
/// # Ok(()) }
|
/// # Ok(()) }
|
||||||
/// ```
|
/// ```
|
||||||
pub trait Middleware {
|
pub trait Middleware: Send + Sync + 'static {
|
||||||
/// Handle of the middleware logic.
|
/// Handle of the middleware logic.
|
||||||
fn handle(&self, request: Request, next: MiddlewareNext) -> Result<Response, Error>;
|
fn handle(&self, request: Request, next: MiddlewareNext) -> Result<Response, Error>;
|
||||||
}
|
}
|
||||||
@@ -158,7 +158,7 @@ impl<'a> MiddlewareNext<'a> {
|
|||||||
|
|
||||||
impl<F> Middleware for F
|
impl<F> Middleware for F
|
||||||
where
|
where
|
||||||
F: Fn(Request, MiddlewareNext) -> Result<Response, Error>,
|
F: Fn(Request, MiddlewareNext) -> Result<Response, Error> + Send + Sync + 'static,
|
||||||
{
|
{
|
||||||
fn handle(&self, request: Request, next: MiddlewareNext) -> Result<Response, Error> {
|
fn handle(&self, request: Request, next: MiddlewareNext) -> Result<Response, Error> {
|
||||||
(self)(request, next)
|
(self)(request, next)
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ use crate::body::Payload;
|
|||||||
use crate::header::{self, Header};
|
use crate::header::{self, Header};
|
||||||
use crate::middleware::MiddlewareNext;
|
use crate::middleware::MiddlewareNext;
|
||||||
use crate::unit::{self, Unit};
|
use crate::unit::{self, Unit};
|
||||||
|
use crate::Response;
|
||||||
use crate::{agent::Agent, error::Error};
|
use crate::{agent::Agent, error::Error};
|
||||||
use crate::{Middleware, Response};
|
|
||||||
|
|
||||||
pub type Result<T> = std::result::Result<T, Error>;
|
pub type Result<T> = std::result::Result<T, Error>;
|
||||||
|
|
||||||
@@ -143,11 +143,7 @@ impl Request {
|
|||||||
let response = if !self.agent.state.middleware.is_empty() {
|
let response = if !self.agent.state.middleware.is_empty() {
|
||||||
// Clone agent to get a local copy with same lifetime as Payload
|
// Clone agent to get a local copy with same lifetime as Payload
|
||||||
let agent = self.agent.clone();
|
let agent = self.agent.clone();
|
||||||
let chain = &mut agent
|
let chain = &mut agent.state.middleware.iter().map(|mw| mw.as_ref());
|
||||||
.state
|
|
||||||
.middleware
|
|
||||||
.iter()
|
|
||||||
.map(|mw| mw.as_ref() as &dyn Middleware);
|
|
||||||
|
|
||||||
let request_fn = Box::new(request_fn);
|
let request_fn = Box::new(request_fn);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user