The trick is to only have a single generic parameter:
trait Generator {
type Foo;
fn generate(&self) -> Self::Foo;
}
struct Baz
where
G: Generator,
{
generator: G,
vec: Vec,
}
impl Baz
where
G: Generator,
{
fn add_foo(&mut self) {
self.vec.push(self.generator.generate());
}
}
Since the vector will contain G::Foo, we can actually just say that.
The Rust style is snake_case, so I updated that as well as made the type parameter G to help the reader.