#![warn(clippy::copy_iterator)] #[derive(Copy, Clone)] struct Countdown(u8); impl Iterator for Countdown { type Item = u8; fn next(&mut self) -> Option { self.0.checked_sub(1).map(|c| { self.0 = c; c }) } } fn main() { let my_iterator = Countdown(5); assert_eq!(my_iterator.take(1).count(), 1); assert_eq!(my_iterator.count(), 5); }