Skip to main content

EventStore

Trait EventStore 

Source
pub trait EventStore: Send + Sync {
    // Required methods
    fn append<'life0, 'life1, 'async_trait>(
        &'life0 self,
        aggregate_id: &'life1 str,
        version_check: VersionCheck,
        events: Vec<Event>,
    ) -> Pin<Box<dyn Future<Output = EventStoreResult<()>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;
    fn load<'life0, 'life1, 'async_trait>(
        &'life0 self,
        aggregate_id: &'life1 str,
    ) -> Pin<Box<dyn Future<Output = EventStoreResult<Vec<Event>>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;
    fn load_from<'life0, 'life1, 'async_trait>(
        &'life0 self,
        aggregate_id: &'life1 str,
        from_sequence: i64,
    ) -> Pin<Box<dyn Future<Output = EventStoreResult<Vec<Event>>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;
    fn stream_all<'life0, 'async_trait>(
        &'life0 self,
        from_position: i64,
    ) -> Pin<Box<dyn Future<Output = EventStoreResult<Vec<Event>>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait;
    fn get_version<'life0, 'life1, 'async_trait>(
        &'life0 self,
        aggregate_id: &'life1 str,
    ) -> Pin<Box<dyn Future<Output = EventStoreResult<i64>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;

    // Provided methods
    fn save_snapshot<'life0, 'life1, 'async_trait>(
        &'life0 self,
        snapshot: &'life1 Snapshot,
    ) -> Pin<Box<dyn Future<Output = EventStoreResult<()>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
    fn load_snapshot<'life0, 'life1, 'async_trait>(
        &'life0 self,
        aggregate_id: &'life1 str,
    ) -> Pin<Box<dyn Future<Output = EventStoreResult<Option<Snapshot>>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
}
Expand description

Trait for event store implementations.

append MUST invoke validate_audit_batch before persisting (HIPAA defense in depth). The CommandBus also validates upstream — both layers run.

Required Methods§

Source

fn append<'life0, 'life1, 'async_trait>( &'life0 self, aggregate_id: &'life1 str, version_check: VersionCheck, events: Vec<Event>, ) -> Pin<Box<dyn Future<Output = EventStoreResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Append events to the store for a specific aggregate.

Implementations must call validate_audit_batch(aggregate_id, &events)? before any persistence work.

Source

fn load<'life0, 'life1, 'async_trait>( &'life0 self, aggregate_id: &'life1 str, ) -> Pin<Box<dyn Future<Output = EventStoreResult<Vec<Event>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn load_from<'life0, 'life1, 'async_trait>( &'life0 self, aggregate_id: &'life1 str, from_sequence: i64, ) -> Pin<Box<dyn Future<Output = EventStoreResult<Vec<Event>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Source

fn stream_all<'life0, 'async_trait>( &'life0 self, from_position: i64, ) -> Pin<Box<dyn Future<Output = EventStoreResult<Vec<Event>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Source

fn get_version<'life0, 'life1, 'async_trait>( &'life0 self, aggregate_id: &'life1 str, ) -> Pin<Box<dyn Future<Output = EventStoreResult<i64>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Provided Methods§

Source

fn save_snapshot<'life0, 'life1, 'async_trait>( &'life0 self, snapshot: &'life1 Snapshot, ) -> Pin<Box<dyn Future<Output = EventStoreResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Persist an aggregate snapshot (upsert by aggregate_id).

Default returns EventStoreError::Unsupported so stores that have not implemented snapshotting compile unchanged and fail loudly if a caller tries to save one.

Source

fn load_snapshot<'life0, 'life1, 'async_trait>( &'life0 self, aggregate_id: &'life1 str, ) -> Pin<Box<dyn Future<Output = EventStoreResult<Option<Snapshot>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Load the latest snapshot for an aggregate, if one exists.

Default returns Ok(None) — safe because the caller then replays the stream from sequence 0, which is always correct, just slower.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§