yoagent_state/
projector.rs1use crate::{Event, Graph, StateError, StateOp};
2
3pub const STATE_OPS_APPLIED: &str = "state.ops_applied";
4
5pub fn project_event(graph: &mut Graph, event: &Event) -> Result<(), StateError> {
6 if event.kind == STATE_OPS_APPLIED {
7 let ops: Vec<StateOp> = event.payload_as()?;
8 graph.apply_ops(&ops)?;
9 }
10
11 Ok(())
12}
13
14pub fn replay(events: &[Event]) -> Result<Graph, StateError> {
15 let mut graph = Graph::default();
16 for event in events {
17 project_event(&mut graph, event)?;
18 }
19 Ok(graph)
20}