pub trait Middleware: Send + Sync {
// Required method
fn handle(
&self,
request: &Request,
connection: &ConnectionInfo,
next: &dyn Application,
) -> Result<Response, String>;
// Provided methods
fn runs_inline(
&self,
_request: &Request,
_connection: &ConnectionInfo,
) -> bool { ... }
fn is_passthrough(
&self,
_request: &Request,
_connection: &ConnectionInfo,
) -> bool { ... }
}Expand description
A single middleware layer.
Receive the request, call next.execute(request, connection) to pass
control to the next layer (or the inner application), and optionally
inspect or transform the resulting response.
Short-circuit by returning a Response (or Err) without calling next.
Required Methods§
fn handle( &self, request: &Request, connection: &ConnectionInfo, next: &dyn Application, ) -> Result<Response, String>
Provided Methods§
Sourcefn runs_inline(&self, _request: &Request, _connection: &ConnectionInfo) -> bool
fn runs_inline(&self, _request: &Request, _connection: &ConnectionInfo) -> bool
true when this layer’s own work for request never blocks (in-memory
state, atomics, short mutexes) — see Application::runs_inline. A
WithMiddleware stack runs inline only if every layer and the inner
application agree. Default false.
Sourcefn is_passthrough(
&self,
_request: &Request,
_connection: &ConnectionInfo,
) -> bool
fn is_passthrough( &self, _request: &Request, _connection: &ConnectionInfo, ) -> bool
true when handle would do nothing for request but call next
(e.g. a rate limit that isn’t configured). A WithMiddleware stack
offers the inner application’s execute_async only if every layer
passes the request through. Default false.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".
Implementors§
impl Middleware for BlocklistLayer
impl Middleware for CacheLayer
impl Middleware for CanaryLayer
impl Middleware for GrpcProxy
http2 only.impl Middleware for H2ReverseProxy
http2 only.