1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
use cqrs_es2::{
Error,
EventContext,
ICommand,
IEvent,
};
/// Event dispatcher are usually the query stores. It updates its
/// query with the emitted events.
///
/// # Example
///
/// For illustration only:
///
/// ```rust
/// use cqrs_es2::{
/// example_impl::{
/// CustomerCommand,
/// CustomerEvent,
/// },
/// Error,
/// EventContext,
/// };
///
/// use cqrs_es2_store::IEventDispatcher;
///
/// pub struct CustomerEventDispatcher {
/// pub name: String,
/// pub email: String,
/// pub latest_address: String,
/// };
///
/// impl IEventDispatcher<CustomerCommand, CustomerEvent>
/// for CustomerEventDispatcher
/// {
/// fn dispatch(
/// &mut self,
/// aggregate_id: &str,
/// events: &Vec<
/// EventContext<CustomerCommand, CustomerEvent>,
/// >,
/// ) -> Result<(), Error> {
/// for event in events {
/// //..
/// }
/// Ok(())
/// }
/// }
/// ```
pub trait IEventDispatcher<C: ICommand, E: IEvent> {
/// Events will be dispatched here immediately after being
/// committed for the downstream queries to be updated.
fn dispatch(
&mut self,
aggregate_id: &str,
events: &Vec<EventContext<C, E>>,
) -> Result<(), Error>;
}