1 use std::iter::Peekable;
5 pub struct Delimited<I: Iterator> {
10 pub trait IterDelimited: Iterator + Sized {
11 fn delimited(self) -> Delimited<Self> {
12 Delimited { is_first: true, iter: self.peekable() }
16 impl<I: Iterator> IterDelimited for I {}
18 pub struct IteratorItem<T> {
24 impl<I: Iterator> Iterator for Delimited<I> {
25 type Item = IteratorItem<I::Item>;
27 fn next(&mut self) -> Option<Self::Item> {
28 let value = self.iter.next()?;
29 let is_first = mem::replace(&mut self.is_first, false);
30 let is_last = self.iter.peek().is_none();
31 Some(IteratorItem { value, is_first, is_last })
35 impl<T> Deref for IteratorItem<T> {
38 fn deref(&self) -> &Self::Target {