persist-es 0.2.2

A backing logic for an RDBMS implementation of an event store for cqrs-es.
Documentation
use crate::{PersistenceError, QueryContext, SnapshotStoreAggregateContext};
use async_trait::async_trait;
use cqrs_es::{Aggregate, EventEnvelope, View};

/// Handles the database access needed for operation of a PersistedSnapshotStore.
#[async_trait]
pub trait PersistedEventRepository<A>: Send + Sync
where
    A: Aggregate,
{
    /// Returns all events for a single aggregate instance.
    async fn get_events(
        &self,
        aggregate_id: &str,
    ) -> Result<Vec<EventEnvelope<A>>, PersistenceError>;

    /// Returns the last events for a single aggregate instance.
    async fn get_last_events(
        &self,
        aggregate_id: &str,
        number_events: usize,
    ) -> Result<Vec<EventEnvelope<A>>, PersistenceError>;

    /// Returns the current snapshot for an aggregate instance.
    async fn get_snapshot(
        &self,
        aggregate_id: &str,
    ) -> Result<Option<SnapshotStoreAggregateContext<A>>, PersistenceError>;

    /// Commits the updated aggregate and accompanying events.
    async fn persist(
        &self,
        events: &[EventEnvelope<A>],
        snapshot_update: Option<(String, A, usize)>,
    ) -> Result<(), PersistenceError>;
}

/// Handles the database access needed for a GenericQuery.
#[async_trait]
pub trait ViewRepository<V, A>: Send + Sync
where
    V: View<A>,
    A: Aggregate,
{
    /// Returns the current view instance.
    async fn load(
        &self,
        query_instance_id: &str,
    ) -> Result<Option<(V, QueryContext)>, PersistenceError>;

    /// Updates the view instance.
    async fn update_view(&self, view: V, context: QueryContext) -> Result<(), PersistenceError>;
}