use serde::{Deserialize, Serialize};
use umadb_dcb::{DcbQuery, DcbQueryItem};
use crate::{
error::SqliteError,
event::{EventSet, StoredEvent},
};
#[derive(Clone, Debug, PartialEq, Serialize, Deserialize)]
pub struct CommandSubmission {
pub command_type: String,
pub input: String,
}
pub trait Policy: Sized {
type Query: EventSet;
fn init() -> Result<Self, SqliteError>;
fn query(&self) -> DcbQuery {
DcbQuery::new().item(DcbQueryItem::new().types(Self::Query::event_types()))
}
fn handle(
&mut self,
event: StoredEvent<<Self::Query as EventSet>::Item>,
) -> Result<Vec<CommandSubmission>, SqliteError>;
}