fn main() {} trait Topology {} struct DummyTopology {} impl Topology for DummyTopology {} impl Topology for LampTopology {} struct LampTopology {} struct Maestro { topology: Box, } trait Score { type Topology: Topology; fn execute(&self, topology: &Self::Topology); } struct K8sScore {} impl Score for K8sScore { type Topology = LampTopology; fn execute(&self, topology: &Box) { todo!() } } impl Maestro { pub fn execute(&self, score: Box>) { score.execute(&self.topology); } }