chiark / gitweb /
server: wip
[hippotat.git] / src / multipart.rs
index 5099f05fe120b24fb9974060e599dd631f7774bc..9f3fca9fade6b2533c35161f6e704e7fdcd2f35f 100644 (file)
@@ -88,9 +88,15 @@ impl<'b> MetadataFieldIterator<'b> {
   } }
 
   #[throws(AE)]
-  pub fn need<T>(&mut self) -> T
+  pub fn need_next(&mut self) -> &'b str
+  {
+    self.next().ok_or_else(|| anyhow!("missing"))??
+  }
+
+  #[throws(AE)]
+  pub fn need_parse<T>(&mut self) -> T
   where T: FromStr,
-        T::Err: std::error::Error + Sync + Send + 'static,
+        AE: From<T::Err>,
   {
     self.parse()?.ok_or_else(|| anyhow!("missing"))?
   }
@@ -98,11 +104,19 @@ impl<'b> MetadataFieldIterator<'b> {
   #[throws(AE)]
   pub fn parse<T>(&mut self) -> Option<T>
   where T: FromStr,
-        T::Err: std::error::Error + Sync + Send + 'static,
+        AE: From<T::Err>,
   {
     let s = if let Some(r) = self.next() { r? } else { return None };
     Some(s.parse()?)
   }
+
+  pub fn remaining_bytes_len(&self) -> usize {
+    if let Some(last) = self.last {
+      self.buf.len() - last
+    } else {
+      0
+    }
+  }
 }
                                       
 impl<'b> Iterator for MetadataFieldIterator<'b> {