Skip to main content

cqrs_rust_lib/
denormalizer.rs

1use crate::{Aggregate, CqrsContext, CqrsError, EventEnvelope, MaybeSend, MaybeSync};
2use serde::de::DeserializeOwned;
3use serde::Serialize;
4use std::fmt::Debug;
5
6cqrs_async_trait! {
7pub trait Dispatcher<A: Aggregate>: MaybeSend + MaybeSync {
8    async fn dispatch(
9        &self,
10        aggregate_id: &str,
11        events: &[EventEnvelope<A>],
12        context: &CqrsContext,
13    ) -> Result<(), CqrsError>;
14}
15}
16
17pub trait View<A: Aggregate>:
18    Debug + Clone + Default + Serialize + DeserializeOwned + MaybeSend + MaybeSync
19{
20    const TYPE: &'static str;
21    const IS_CHILD_OF_AGGREGATE: bool;
22
23    fn view_id(event: &EventEnvelope<A>) -> String;
24    fn update(&self, event: &EventEnvelope<A>) -> Option<Self>;
25}
26
27pub trait ViewElements<A: Aggregate>: View<A> {
28    fn aggregate_id(&self) -> String;
29}