pub struct MiddlewareChain {
pub middlewares: Vec<Arc<dyn Middleware>>,
pub handler: Option<Arc<dyn Handler>>,
}
Expand description
Middleware chain holds all middlewares and the final handler.
The chain executes middleware in the order they were added, and finally calls the handler if all middleware pass control forward.
§Examples
use wsforge::prelude::*;
let mut chain = MiddlewareChain::new();
// Add middleware
chain.layer(LoggerMiddleware::new());
// Set final handler
chain.handler(handler(my_handler));
Fields§
§middlewares: Vec<Arc<dyn Middleware>>
All middleware in the chain, executed in order
handler: Option<Arc<dyn Handler>>
The final handler to call after all middleware
Implementations§
Source§impl MiddlewareChain
impl MiddlewareChain
Sourcepub fn new() -> MiddlewareChain
pub fn new() -> MiddlewareChain
Creates a new empty middleware chain.
§Examples
use wsforge::prelude::*;
let chain = MiddlewareChain::new();
Sourcepub fn layer(self, middleware: Arc<dyn Middleware>) -> MiddlewareChain
pub fn layer(self, middleware: Arc<dyn Middleware>) -> MiddlewareChain
Sourcepub fn handler(self, handler: Arc<dyn Handler>) -> MiddlewareChain
pub fn handler(self, handler: Arc<dyn Handler>) -> MiddlewareChain
Set the final handler for the chain.
The handler is called after all middleware have been executed.
§Arguments
handler
- The handler to call
§Examples
use wsforge::prelude::*;
async fn my_handler(msg: Message) -> Result<String> {
Ok("response".to_string())
}
let mut chain = MiddlewareChain::new();
chain.handler(handler(my_handler));
Sourcepub async fn execute(
&self,
message: Message,
conn: Connection,
state: AppState,
extensions: Extensions,
) -> Result<Option<Message>, Error>
pub async fn execute( &self, message: Message, conn: Connection, state: AppState, extensions: Extensions, ) -> Result<Option<Message>, Error>
Execute the middleware chain.
This runs all middleware in order, then calls the handler if present.
§Arguments
message
- The message to processconn
- The connectionstate
- Application stateextensions
- Extension data
§Examples
use wsforge::prelude::*;
let state = AppState::new();
let extensions = Extensions::new();
let response = chain.execute(msg, conn, state, extensions).await?;
Trait Implementations§
Source§impl Clone for MiddlewareChain
impl Clone for MiddlewareChain
Source§fn clone(&self) -> MiddlewareChain
fn clone(&self) -> MiddlewareChain
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Default for MiddlewareChain
impl Default for MiddlewareChain
Source§fn default() -> MiddlewareChain
fn default() -> MiddlewareChain
Returns the “default value” for a type. Read more
Auto Trait Implementations§
impl Freeze for MiddlewareChain
impl !RefUnwindSafe for MiddlewareChain
impl Send for MiddlewareChain
impl Sync for MiddlewareChain
impl Unpin for MiddlewareChain
impl !UnwindSafe for MiddlewareChain
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more