use std::fmt;
use umadb_dcb::{DcbQuery, DcbQueryItem};
use crate::{
error::SqliteError,
event::{EventSet, StoredEvent},
};
pub trait Effect: Sized {
type Query: EventSet;
type Error: fmt::Display;
fn init() -> Result<Self, SqliteError>;
fn query(&self) -> DcbQuery {
DcbQuery::new().item(DcbQueryItem::new().types(Self::Query::event_types()))
}
fn partition_key(
&self,
_event: StoredEvent<<Self::Query as EventSet>::Item>,
) -> Option<String> {
None
}
fn handle(
&mut self,
event: StoredEvent<<Self::Query as EventSet>::Item>,
) -> Result<(), Self::Error>;
}