hyper_request_validator/
lib.rs

1//! [`hyper`] integration for the [`http_request_validator`].
2
3use hyper::{Body, Request};
4
5/// The bufferer that uses [`hyper::body::to_bytes`] implementation.
6#[derive(Debug, Default, Clone, Copy, PartialEq, Eq)]
7pub struct Bufferer;
8
9#[async_trait::async_trait]
10impl<Body> http_body_request_validator::Bufferer<Body> for Bufferer
11where
12    Body: http_body::Body + Send,
13    for<'a> Body: 'a,
14    <Body as http_body::Body>::Data: Send,
15{
16    type Data = bytes::Bytes;
17    type Error = <Body as http_body::Body>::Error;
18
19    async fn buffer(&self, body: Body) -> Result<Self::Data, Self::Error> {
20        hyper::body::to_bytes(body).await
21    }
22}
23
24/// The [`http_body_request_validator::Error`] type specialized for [`hyper`] [`Bufferer`].
25pub type Error<V> = http_body_request_validator::Error<hyper::Error, V>;
26
27/// Validate the [`hyper::Request`].
28pub async fn validate<Validator>(
29    validator: Validator,
30    req: Request<Body>,
31) -> Result<Request<Body>, Error<Validator::Error>>
32where
33    Validator: http_request_validator::Validator<bytes::Bytes>,
34{
35    http_body_request_validator::validate(Bufferer, validator, req).await
36}