evento_store/
engine.rs

1use async_trait::async_trait;
2use dyn_clone::DynClone;
3use evento_query::{CursorType, QueryResult};
4use serde_json::Value;
5
6use crate::{
7    error::Result,
8    store::{Event, WriteEvent},
9};
10
11#[cfg(feature = "memory")]
12mod memory;
13#[cfg(feature = "memory")]
14pub use memory::*;
15
16#[cfg(feature = "pg")]
17mod pg;
18#[cfg(feature = "pg")]
19pub use pg::*;
20
21#[async_trait]
22pub trait Engine: DynClone + Send + Sync {
23    async fn write(
24        &self,
25        aggregate_id: &'_ str,
26        events: Vec<WriteEvent>,
27        original_version: u16,
28    ) -> Result<Vec<Event>>;
29
30    async fn insert(&self, events: Vec<Event>) -> Result<()>;
31
32    async fn upsert(&self, event: Event) -> Result<()>;
33
34    async fn read(
35        &self,
36        first: u16,
37        after: Option<CursorType>,
38        filters: Option<Vec<Value>>,
39        aggregate_id: Option<&'_ str>,
40    ) -> Result<QueryResult<Event>>;
41
42    async fn last(&self) -> Result<Option<Event>>;
43}
44
45dyn_clone::clone_trait_object!(Engine);