cqrs_rust_lib/es/
storage.rs1use 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}