mod capabilities;
pub mod change;
pub(crate) mod in_memory;
mod load;
mod plan;
mod workspace;
pub use change::ReadModelChange;
use serde::{de::DeserializeOwned, Serialize};
use crate::table::{RowKey, RowValues, TableSchema, TableStoreError};
pub trait ReadModel: Serialize + DeserializeOwned + Clone + Send + Sync {
const COLLECTION: &'static str;
fn id(&self) -> &str;
}
#[derive(Debug, Clone, PartialEq)]
pub struct Versioned<T> {
pub data: T,
pub version: u64,
}
pub trait RelationalReadModel: Clone + Send + Sync + Sized {
fn schema() -> &'static TableSchema;
fn primary_key(&self) -> Result<RowKey, TableStoreError>;
fn to_row(&self) -> Result<RowValues, TableStoreError>;
fn from_row(row: RowValues) -> Result<Self, TableStoreError>;
}
pub trait RelationalReadModelIncludes: RelationalReadModel {
fn hydrate_include(
&mut self,
include: &str,
rows: Vec<RowValues>,
) -> Result<(), TableStoreError>;
fn include_rows(&self, include: &str) -> Result<Vec<RowValues>, TableStoreError>;
fn include_target_schema(include: &str) -> Result<&'static TableSchema, TableStoreError>;
}
pub use capabilities::ReadModelQueryCapabilities;
pub use in_memory::InMemoryReadModelStore;
pub use load::{
ReadModelIncludeRows, ReadModelLoadBuilder, ReadModelLoadGraph, ReadModelLoadRequest,
};
pub use plan::ReadModelWritePlanBuilder;
pub use workspace::{ReadModelWorkspace, ReadModelWorkspaceExt};