If you have some common modes, like Alpha and Beta can both do input things, you could have another sealed trait, like: trait InputCapable { } impl InputCapable for Alpha {} impl InputCapable for Beta {} impl Container { fn get_input(&mut self) -> u16 { /* ... */ } }