#![allow(dead_code, deprecated, unused_variables, unused_mut)] struct Alternate { state: i32, } impl Iterator for Alternate { type Item = i32; fn next(&mut self) -> Option { let val = self.state; self.state = self.state + 1; (val % 2 == 0).then_some(val) } } fn main() { let mut iter = Alternate { state: 0 }; assert_eq!(iter.next(), Some(0)); assert_eq!(iter.next(), None); assert_eq!(iter.next(), Some(2)); assert_eq!(iter.next(), None); let mut iter = iter.fuse(); assert_eq!(iter.next(), Some(4)); assert_eq!(iter.next(), None); assert_eq!(iter.next(), None); assert_eq!(iter.next(), None); assert_eq!(iter.next(), None); }