1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
use async_trait::async_trait; use salvo_core::http::errors::*; use salvo_core::http::HttpBody; use salvo_core::prelude::*; pub struct MaxSizeHandler(u64); #[async_trait] impl Handler for MaxSizeHandler { async fn handle(&self, req: &mut Request, _depot: &mut Depot, res: &mut Response) { if let Some(upper) = req.body().and_then(|body| body.size_hint().upper()) { if upper > self.0 { res.set_http_error(PayloadTooLarge()); } } } } pub fn max_size(size: u64) -> MaxSizeHandler { MaxSizeHandler(size) }