#[allow(non_camel_case_types)]
pub enum PartName { m, d, Other }
+pub type BoundaryFinder = memchr::memmem::Finder<'static>;
+
#[throws(AE)]
pub fn process_component<'b>(warnings: &mut Warnings,
after_leader: &'b [u8], expected: PartName)
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()?)
+ }
+
+ 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> {
Some(s)
}
}
+impl<'b> std::iter::FusedIterator for MetadataFieldIterator<'b> { }