use sim_citizen::CitizenRegistry;
use sim_citizen_derive::Citizen;
use sim_kernel::{Expr, Result, Symbol};
#[derive(Clone, Debug, PartialEq, Citizen)]
#[citizen(symbol = "expr-tree/SourceRecord", version = 1)]
pub struct DurableSourceRecord {
pub path: String,
pub source: Expr,
pub revision: u64,
}
impl Default for DurableSourceRecord {
fn default() -> Self {
Self {
path: "/cell-1".to_owned(),
source: Expr::Nil,
revision: 0,
}
}
}
#[derive(Clone, Debug, Default, PartialEq, Citizen)]
#[citizen(symbol = "expr-tree/PolicyRecord", version = 1)]
pub struct DurablePolicyRecord {
pub path: String,
pub calc_trigger: String,
pub source_codec: Option<String>,
pub result_codec: Option<String>,
}
pub fn durable_source_class_symbol() -> Symbol {
Symbol::qualified("expr-tree", "SourceRecord")
}
pub fn durable_policy_class_symbol() -> Symbol {
Symbol::qualified("expr-tree", "PolicyRecord")
}
pub fn expr_tree_citizen_registry() -> Result<CitizenRegistry> {
let mut registry = CitizenRegistry::new();
registry
.register::<DurableSourceRecord>()?
.register::<DurablePolicyRecord>()?;
Ok(registry)
}