Expand description
Middleware system for WebSocket client operations.
This module provides a composable middleware system inspired by Axum’s middleware/layer system. Middleware can be used to observe, modify, or control the flow of WebSocket messages being sent and received by the client.
§Key Components
WebSocketMiddleware: The core trait for implementing middlewareMiddlewareStack: A composable stack of middleware layersMiddlewareContext: Context passed to middleware with message and client information
§Example Usage
use binary_options_tools_core_pre::middleware::{WebSocketMiddleware, MiddlewareContext};
use binary_options_tools_core_pre::traits::AppState;
use binary_options_tools_core_pre::error::CoreResult;
use async_trait::async_trait;
use tokio_tungstenite::tungstenite::Message;
use std::sync::Arc;
#[derive(Debug)]
struct MyState;
impl AppState for MyState {
fn clear_temporal_data(&self) {}
}
// Example statistics middleware
struct StatisticsMiddleware {
sent_count: Arc<std::sync::atomic::AtomicU64>,
received_count: Arc<std::sync::atomic::AtomicU64>,
}
#[async_trait]
impl WebSocketMiddleware<MyState> for StatisticsMiddleware {
async fn on_send(&self, message: &Message, context: &MiddlewareContext<MyState>) -> CoreResult<()> {
self.sent_count.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
println!("Sending message: {:?}", message);
Ok(())
}
async fn on_receive(&self, message: &Message, context: &MiddlewareContext<MyState>) -> CoreResult<()> {
self.received_count.fetch_add(1, std::sync::atomic::Ordering::Relaxed);
println!("Received message: {:?}", message);
Ok(())
}
}Structs§
- Middleware
Context - Context information passed to middleware during message processing.
- Middleware
Stack - A composable stack of middleware layers.
- Middleware
Stack Builder - A builder for creating middleware stacks in a fluent manner.
Traits§
- WebSocket
Middleware - Trait for implementing WebSocket middleware.