Rust iterators
From wikinotes
Iterators are lazily evaluated sequences of items.
Like python generators, ruby enumerators, etc.
Example
This will keep on iterating over weekdays infinitely.
#[derive(Debug)] enum Weekday { MON = 0, TUE, WED, THU, FRI, SAT, SUN, } impl Iterator for Weekday { type Item = Weekday; fn next(&mut self) -> Option<Self::Item> { let day = match self { Weekday::MON => Weekday::TUE, Weekday::TUE => Weekday::WED, Weekday::WED => Weekday::THU, Weekday::THU => Weekday::FRI, Weekday::FRI => Weekday::SAT, Weekday::SAT => Weekday::SUN, Weekday::SUN => Weekday::MON, }; Some(day) } } fn main() { let mut day = Weekday::SAT; day.next(); day.next(); matches!(day, Weekday::MON); println!("success"); }