RequestHandler

Trait RequestHandler 

Source
pub trait RequestHandler:
    Send
    + Sync
    + 'static {
    // Required methods
    fn handle_request(
        &self,
        data: RequestData,
    ) -> impl Future<Output = ()> + Send;
    fn handle_response(
        &self,
        request_data: RequestData,
        response_data: ResponseData,
    ) -> impl Future<Output = ()> + Send;
}
Expand description

Trait for handling captured request and response data.

Implement this trait to create custom logic for processing HTTP requests and responses captured by the middleware. The trait provides separate async methods for handling requests and responses, both of which include a correlation ID to match them together.

§Examples

use outlet::{RequestHandler, RequestData, ResponseData};
use tracing::info;

#[derive(Debug)]
struct MyHandler;

impl RequestHandler for MyHandler {
    async fn handle_request(&self, data: RequestData) {
        info!("Received {} request to {}", data.method, data.uri);
    }

    async fn handle_response(&self, request_data: RequestData, response_data: ResponseData) {
        info!("Sent {} response in {}ms",
              response_data.status, response_data.duration.as_millis());
    }
}

Required Methods§

Source

fn handle_request(&self, data: RequestData) -> impl Future<Output = ()> + Send

Handle a captured HTTP request.

This method is called when a request has been captured by the middleware.

§Arguments
  • data - The captured request data including method, URI, headers, and optionally body
Source

fn handle_response( &self, request_data: RequestData, response_data: ResponseData, ) -> impl Future<Output = ()> + Send

Handle a captured HTTP response.

This method is called when a response has been captured by the middleware. The corresponding request data is provided to allow for correlation and additional context during response processing.

§Arguments
  • request_data - The corresponding request data for context
  • response_data - The captured response data including status, headers, body, and timing

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§