Both of these let a trait be generic over a type. They mean different things:
trait Source { type Item; fn next_item(&mut self) -> Option<Self::Item>; }
trait Source<T> { fn next_item(&mut self) -> Option<T>; }
With an associated type, a type implements Source once, and picks Item as part of that single implementation.
With a generic parameter, a type may implement Source<u32>, Source<String>, Source<Frame> — as many times as it likes.
