eventuali_core/store/
traits.rs1use crate::{Event, AggregateId, AggregateVersion, Result};
2use crate::streaming::EventStreamer;
3use async_trait::async_trait;
4use std::sync::Arc;
5
6#[async_trait]
7pub trait EventStore {
8 async fn save_events(&self, events: Vec<Event>) -> Result<()>;
9
10 async fn load_events(
11 &self,
12 aggregate_id: &AggregateId,
13 from_version: Option<AggregateVersion>,
14 ) -> Result<Vec<Event>>;
15
16 async fn load_events_by_type(
17 &self,
18 aggregate_type: &str,
19 from_version: Option<AggregateVersion>,
20 ) -> Result<Vec<Event>>;
21
22 async fn get_aggregate_version(&self, aggregate_id: &AggregateId) -> Result<Option<AggregateVersion>>;
23
24 fn set_event_streamer(&mut self, streamer: Arc<dyn EventStreamer + Send + Sync>);
26}
27
28#[async_trait]
29pub trait EventStoreBackend {
30 async fn initialize(&mut self) -> Result<()>;
31
32 async fn save_events(&self, events: Vec<Event>) -> Result<()>;
33
34 async fn load_events(
35 &self,
36 aggregate_id: &AggregateId,
37 from_version: Option<AggregateVersion>,
38 ) -> Result<Vec<Event>>;
39
40 async fn load_events_by_type(
41 &self,
42 aggregate_type: &str,
43 from_version: Option<AggregateVersion>,
44 ) -> Result<Vec<Event>>;
45
46 async fn get_aggregate_version(&self, aggregate_id: &AggregateId) -> Result<Option<AggregateVersion>>;
47}
48
49pub trait EventSerializer {
50 fn serialize_event_data(&self, event: &Event) -> Result<Vec<u8>>;
51 fn deserialize_event_data(&self, data: &[u8], event_type: &str) -> Result<Event>;
52}