Skip to main content

yoagent_state/
projector.rs

1use 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}