use intertrait::cast::*; use intertrait::*; #[cast_to(Greet)] #[allow(dead_code)] enum Data { Var1, Var2(u32), } trait Source: CastFrom {} trait Greet { fn greet(&self); } impl Greet for Data { fn greet(&self) { println!("Hello"); } } impl Source for Data {} #[test] fn test_cast_to_on_enum() { let data = Data::Var2(1); let source: &dyn Source = &data; let greet = source.cast::(); greet.unwrap().greet(); }