I have a trait Foo
, with some implementations, together with an enum Foos
with one variant per implemention. I want to be able to convert my enum into Box<dyn Foo>
.
This is my current solution:
trait Foo {}
struct FooA {}
impl Foo for FooA {}
struct FooB {}
impl Foo for FooB {}
struct FooC {}
impl Foo for FooC {}
enum Foos {
A(FooA),
B(FooB),
C(FooC),
}
impl Foos {
fn into_box(self) -> Box<dyn Foo> {
match self {
Foos::A(foo) => Box::new(foo),
Foos::B(foo) => Box::new(foo),
Foos::C(foo) => Box::new(foo),
}
}
}
It works, but there's a lot of boiler plate in into_enum
. As the number of variants grow, so will the function. Is there a simpler way to do this? It feels like it should be a one liner!
impl Foo for Foos
? – MiyokomizarFoo
has many methods and I don't want to have to do a match over the enum variants for every one of them. – Vishinsky