Instead of using a single base struct that can be functionally composed in different ways, we could use traits to define the behavior of different generators. This would still be (perhaps even more) user-friendly, but potentially more flexible and cleeaner.
Maybe an idea could be to use traits: https://ahsmart.com/pub/holy-traits-design-patterns-and-best-practice-book/.
Instead of using a single base struct that can be functionally composed in different ways, we could use traits to define the behavior of different generators. This would still be (perhaps even more) user-friendly, but potentially more flexible and cleeaner.
Also address: