struct Fibonacci {
    curr: u32,
    next: u32,
}

impl Iterator for Fibonacci {
    // We can refer to this type using Self::Item
    type Item = u32;
    fn next(&mut self) -> Option<Self::Item> {
        let new_next = self.curr + self.next;

        self.curr = self.next;
        self.next = new_next;