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§
Sourcefn handle_request(&self, data: RequestData) -> impl Future<Output = ()> + Send
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
Sourcefn handle_response(
&self,
request_data: RequestData,
response_data: ResponseData,
) -> impl Future<Output = ()> + Send
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 contextresponse_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.