pub struct OneMore> { parent: P, last: Option, done: bool, } impl> OneMore { pub fn new(parent: P, last: I) -> Self { Self { parent, last: Some(last), done: false, } } } impl> Iterator for OneMore { type Item = I; fn next(&mut self) -> Option { if self.done { return None; } match self.parent.next() { Some(item) => Some(item), None => { self.done = true; Some(self.last.take().unwrap()) } } } }