pub trait MyTrait { type Item; fn next(&mut self) -> Option; } pub struct Empty; impl MyTrait for Empty { type Item = (); fn next(&mut self) -> Option<()> { None } } pub struct Void; impl MyTrait for Void { type Item = (); fn next(&mut self) -> Option<()> { Some(()) } }