use axum::body::Body;
pub type Error<V> = http_body_request_validator::Error<axum::Error, V>;
pub type Data = bytes::Bytes;
pub type Bufferer = http_body_request_validator::http_body_util::Bufferer<Data>;
pub type BuffererBuffered = http_body_request_validator::bufferer::BufferedFor<Bufferer, Body>;
#[cfg(test)]
static_assertions::assert_type_eq_all!(Data, bytes::Bytes);
enum CustomBufferedToBody {}
impl http_body_request_validator::convert::BufferedToBody for CustomBufferedToBody {
type Buffered = BuffererBuffered;
type Body = Body;
fn buffered_to_body(buffered: Self::Buffered) -> Self::Body {
let body =
http_body_request_validator::convert::Trivial::<Self::Buffered>::buffered_to_body(
buffered,
);
Body::new(body)
}
}
pub async fn validate<Validator>(
validator: Validator,
req: axum::http::Request<Body>,
) -> Result<axum::http::Request<Body>, Error<Validator::Error>>
where
Validator: http_request_validator::Validator<Data>,
{
http_body_request_validator::BufferingValidator::new(Bufferer::new())
.with_buffered_to_out_body::<CustomBufferedToBody>()
.validate(validator, req)
.await
}