use crate::facade::CalStoreFacade;
use areev_core::error::Result;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ReviewDecision {
Approve,
Reject,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LoopInfo {
Loop,
Analyzers,
Outcomes,
Policy,
}
#[derive(Debug, Clone, Default)]
pub struct RunLoopOptions {
pub full_sweep: bool,
pub min_new: Option<u64>,
pub if_stale_ms: Option<i64>,
}
pub trait GovernanceHost: Send + Sync {
fn run_loop(
&self,
store: &dyn CalStoreFacade,
opts: &RunLoopOptions,
) -> Result<serde_json::Value>;
fn review(
&self,
store: &dyn CalStoreFacade,
rec_hash: &str,
decision: ReviewDecision,
because: &str,
) -> Result<()>;
fn apply(
&self,
store: &dyn CalStoreFacade,
rec_hash: &str,
because: &str,
destructive_cap: bool,
) -> Result<bool>;
fn rollback(&self, store: &dyn CalStoreFacade, rec_hash: &str, because: &str) -> Result<()>;
fn describe(&self, store: &dyn CalStoreFacade, what: LoopInfo) -> Result<serde_json::Value>;
}