Advertisement
Guest User

Untitled

a guest
Mar 18th, 2019
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.78 KB | None | 0 0
  1. use std::{
  2. error::Error,
  3. result::Result
  4. };
  5.  
  6. pub type Generate<A, E> = Box<dyn Fn(&[Box<Generator<Ag = A, Ev = E>>], &A) -> GenerateResult<E>>;
  7.  
  8. pub type GenerateResult<E> = Result<Vec<E>, Box<Error>>;
  9.  
  10. // Traits
  11.  
  12. pub trait Generator {
  13. type Ag;
  14. type Ev;
  15. fn generate(&self, aggregate: &Self::Ag) -> GenerateResult<&Self::Ev>;
  16. }
  17.  
  18. pub fn generate<'a, A: Clone, E>() -> Generate<A, E> {
  19. Box::new(move |generators, aggregate| {
  20. let mut events: Vec<E> = vec![];
  21. let mut new_aggregate = aggregate.clone();
  22.  
  23. for generator in generators {
  24. match generator.generate(&new_aggregate) {
  25. Ok(es) => {
  26.  
  27. // WTF :)
  28.  
  29. events.extend(&es);
  30. }
  31. }
  32. }
  33.  
  34. Ok(vec![])
  35. })
  36. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement