eventuali_core/store/
traits.rs

1use 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    /// Set the event streamer for publishing events
25    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}