How can I approximate method overloading?

Yes, there is, and you almost got it already. Traits are the way to go, but you don’t need trait objects, use generics: #[derive(Debug)] enum IntOrFloat { Int(i32), Float(f32), } trait IntOrFloatTrait { fn to_int_or_float(&self) -> IntOrFloat; } impl IntOrFloatTrait for i32 { fn to_int_or_float(&self) -> IntOrFloat { IntOrFloat::Int(*self) } } impl IntOrFloatTrait for f32 … Read more