Skip to main content

cqrs_rust_lib/es/
storage.rs

1use crate::{Aggregate, CqrsError, EventEnvelope, MaybeSend, MaybeSync, Snapshot};
2use futures::stream::Stream;
3use std::pin::Pin;
4
5#[cfg(not(target_arch = "wasm32"))]
6pub type EventStream<A> = Pin<Box<dyn Stream<Item = Result<EventEnvelope<A>, CqrsError>> + Send>>;
7#[cfg(target_arch = "wasm32")]
8pub type EventStream<A> = Pin<Box<dyn Stream<Item = Result<EventEnvelope<A>, CqrsError>>>>;
9
10cqrs_async_trait! {
11pub trait EventStoreStorage<A>
12where
13    A: Aggregate + 'static,
14{
15    type Session: MaybeSend + MaybeSync;
16
17    async fn start_session(&self) -> Result<Self::Session, CqrsError>;
18    async fn close_session(&self, session: Self::Session) -> Result<(), CqrsError>;
19    async fn fetch_snapshot(&self, aggregate_id: &str) -> Result<Option<Snapshot<A>>, CqrsError>;
20
21    async fn fetch_events_from_version(
22        &self,
23        aggregate_id: &str,
24        version: usize,
25    ) -> Result<EventStream<A>, CqrsError>;
26
27    async fn fetch_all_events(&self, aggregate_id: &str) -> Result<EventStream<A>, CqrsError>;
28
29    async fn fetch_events_paged(
30        &self,
31        aggregate_id: &str,
32        page: usize,
33        page_size: usize,
34    ) -> Result<(Vec<EventEnvelope<A>>, i64), CqrsError>;
35
36    async fn fetch_latest_event(
37        &self,
38        aggregate: &A,
39        session: &Self::Session,
40    ) -> Result<Option<EventEnvelope<A>>, CqrsError>;
41
42    async fn save_events(
43        &self,
44        events: Vec<EventEnvelope<A>>,
45        session: &mut Self::Session,
46    ) -> Result<(), CqrsError>;
47
48    async fn save_snapshot(
49        &self,
50        aggregate: &A,
51        version: usize,
52        session: &mut Self::Session,
53    ) -> Result<(), CqrsError>;
54
55    async fn abort_session(&self, _session: Self::Session) -> Result<(), CqrsError> {
56        Ok(())
57    }
58}
59}