Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- use std::{
- error::Error,
- result::Result
- };
- pub type Generate<A, E> = Box<dyn Fn(&[Box<Generator<Ag = A, Ev = E>>], &A) -> GenerateResult<E>>;
- pub type GenerateResult<E> = Result<Vec<E>, Box<Error>>;
- // Traits
- pub trait Generator {
- type Ag;
- type Ev;
- fn generate(&self, aggregate: &Self::Ag) -> GenerateResult<&Self::Ev>;
- }
- pub fn generate<'a, A: Clone, E>() -> Generate<A, E> {
- Box::new(move |generators, aggregate| {
- let mut events: Vec<E> = vec![];
- let mut new_aggregate = aggregate.clone();
- for generator in generators {
- match generator.generate(&new_aggregate) {
- Ok(es) => {
- // WTF :)
- events.extend(&es);
- }
- }
- }
- Ok(vec![])
- })
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement