chiark / gitweb /
server: get token
[hippotat.git] / src / multipart.rs
index 112712bb8d5f4ad79d78f5e66473039b4357f46f..1c0be403351b4d91fe691afc6d7d39e10b79d8fe 100644 (file)
@@ -86,6 +86,29 @@ impl<'b> MetadataFieldIterator<'b> {
     last: Some(0),
     iter: memchr::Memchr::new(b'\n', buf),
   } }
+
+  #[throws(AE)]
+  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,
+        AE: From<T::Err>,
+  {
+    self.parse()?.ok_or_else(|| anyhow!("missing"))?
+  }
+
+  #[throws(AE)]
+  pub fn parse<T>(&mut self) -> Option<T>
+  where T: FromStr,
+        AE: From<T::Err>,
+  {
+    let s = if let Some(r) = self.next() { r? } else { return None };
+    Some(s.parse()?)
+  }
 }
                                       
 impl<'b> Iterator for MetadataFieldIterator<'b> {
@@ -101,3 +124,4 @@ impl<'b> Iterator for MetadataFieldIterator<'b> {
     Some(s)
   }
 }
+impl<'b> std::iter::FusedIterator for MetadataFieldIterator<'b> { }