Skip to main content

Module middleware

Module middleware 

Source
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

§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§

MiddlewareContext
Context information passed to middleware during message processing.
MiddlewareStack
A composable stack of middleware layers.
MiddlewareStackBuilder
A builder for creating middleware stacks in a fluent manner.

Traits§

WebSocketMiddleware
Trait for implementing WebSocket middleware.