use std::collections::BTreeMap; use std::collections::BTreeSet; use super::bag::BTreeBag; use preserves::value::AValue; pub enum Event { Removed, Message, Added, } type Path = Vec; type Paths = Vec; type Captures = Vec; trait HandleEvent { fn handle_event<'a>(self, captures: &Captures); } pub enum Skeleton { Blank, Guarded(Guard, Vec) } pub struct AnalysisResults { skeleton: Skeleton, const_paths: Paths, const_vals: Vec, capture_paths: Paths, assertion: AValue, } pub struct Index { all_assertions: BTreeBag, } impl Index { pub fn new() -> Self { Index{ all_assertions: BTreeBag::new() } } // pub fn add_handler(analysis_results: AnalysisResults, } struct Node { continuation: Continuation, edges: BTreeMap>, } struct Continuation { cached_assertions: BTreeSet, leaf_map: BTreeMap, Leaf>>, } struct Selector { pop_count: usize, index: usize, } enum Guard { Rec(AValue, usize), Seq(usize), } struct Leaf { // aka Topic cached_assertions: BTreeSet, handler_map: BTreeMap, } struct Handler { cached_captures: BTreeBag, callbacks: BTreeSet>, }