use async_trait::async_trait;
use reinhardt_http::Request;
use super::{ParamContext, ParamError, ParamResult, extract::FromRequest};
const DEFAULT_MAX_BODY_SIZE: usize = 2 * 1024 * 1024;
pub struct Body(pub Vec<u8>);
#[async_trait]
impl FromRequest for Body {
async fn from_request(req: &Request, _ctx: &ParamContext) -> ParamResult<Self> {
let body_bytes = req
.read_body()
.map_err(|e| ParamError::BodyError(format!("Failed to read body: {}", e)))?;
if body_bytes.len() > DEFAULT_MAX_BODY_SIZE {
return Err(ParamError::PayloadTooLarge(format!(
"Request body size {} bytes exceeds maximum allowed size of {} bytes",
body_bytes.len(),
DEFAULT_MAX_BODY_SIZE
)));
}
Ok(Body(body_bytes.to_vec()))
}
}