chiark / gitweb /
refactor body limit, for reuse in server, return body so far
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Aug 2021 14:43:11 +0000 (15:43 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 8 Aug 2021 14:48:46 +0000 (15:48 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/utils.rs

index b84d2f20f54c0e0dee058c5a8ed00ab81876fbcc..0890cd5b9cbab4df721e5ab0c6f9ca959051da3d 100644 (file)
@@ -19,7 +19,7 @@ impl<T,E> Result<T,E> where AE: From<E> {
 #[derive(Error,Debug)]
 pub enum ReadLimitedError {
   #[error("maximum size {limit} exceeded")]
-  Truncated { limit: usize },
+  Truncated { sofar: Box<[u8]>, limit: usize },
 
   #[error("HTTP error {0}")]
   Hyper(#[from] hyper::Error),
@@ -36,7 +36,7 @@ where S: futures::Stream<Item=Result<hyper::body::Bytes,hyper::Error>>
     let b = item?;
     accum.extend(b);
     if accum.len() > limit {
-      throw!(ReadLimitedError::Truncated { limit })
+      throw!(ReadLimitedError::Truncated { limit, sofar: accum.into() })
     }
   }
   accum.into()