pub struct SharedGraph { /* private fields */ }Expand description
Thread-safe, clonable handle to an EntityGraph.
Uses parking_lot::RwLock for reader-writer locking, allowing
concurrent reads with exclusive writes. Cloning shares the
underlying graph (via Arc).
Write operations automatically send the new graph version on an
internal broadcast channel. Call subscribe
to get a receiver.
Implementations§
Sourcepub fn new(graph: EntityGraph) -> Self
pub fn new(graph: EntityGraph) -> Self
Wrap an EntityGraph in a thread-safe handle.
Sourcepub fn subscribe(&self) -> Receiver<u64>
pub fn subscribe(&self) -> Receiver<u64>
Subscribe to graph change notifications.
Returns a receiver that yields the new graph version after each write operation (add, update, remove).
Sourcepub fn subscribe_with_version(&self) -> (Receiver<u64>, u64)
pub fn subscribe_with_version(&self) -> (Receiver<u64>, u64)
Subscribe and atomically capture the current version under the read lock.
This avoids a TOCTOU race where a write could occur between subscribing and reading the version.
Sourcepub fn subscriber_count(&self) -> usize
pub fn subscriber_count(&self) -> usize
Number of active subscribers.
Sourcepub fn read<F, R>(&self, f: F) -> Rwhere
F: FnOnce(&EntityGraph) -> R,
pub fn read<F, R>(&self, f: F) -> Rwhere
F: FnOnce(&EntityGraph) -> R,
Execute a closure with shared (read) access to the graph.
Sourcepub fn write<F, R>(&self, f: F) -> Rwhere
F: FnOnce(&mut EntityGraph) -> R,
pub fn write<F, R>(&self, f: F) -> Rwhere
F: FnOnce(&mut EntityGraph) -> R,
Execute a closure with exclusive (write) access to the graph.
Sourcepub fn add(&self, entity: HDict) -> Result<String, GraphError>
pub fn add(&self, entity: HDict) -> Result<String, GraphError>
Add an entity. See EntityGraph::add.
Sourcepub fn get(&self, ref_val: &str) -> Option<HDict>
pub fn get(&self, ref_val: &str) -> Option<HDict>
Get an entity by ref value.
Returns an owned clone because the read lock is released before the caller uses the value.
Sourcepub fn update(&self, ref_val: &str, changes: HDict) -> Result<(), GraphError>
pub fn update(&self, ref_val: &str, changes: HDict) -> Result<(), GraphError>
Update an entity. See EntityGraph::update.
Sourcepub fn remove(&self, ref_val: &str) -> Result<HDict, GraphError>
pub fn remove(&self, ref_val: &str) -> Result<HDict, GraphError>
Remove an entity. See EntityGraph::remove.
Sourcepub fn read_filter(
&self,
filter_expr: &str,
limit: usize,
) -> Result<HGrid, GraphError>
pub fn read_filter( &self, filter_expr: &str, limit: usize, ) -> Result<HGrid, GraphError>
Run a filter expression and return a grid.
Sourcepub fn all_entities(&self) -> Vec<HDict>
pub fn all_entities(&self) -> Vec<HDict>
Return all entities as owned clones.
Sourcepub fn contains(&self, ref_val: &str) -> bool
pub fn contains(&self, ref_val: &str) -> bool
Check if an entity with the given ref value exists.
Sourcepub fn read_all(
&self,
filter_expr: &str,
limit: usize,
) -> Result<Vec<HDict>, GraphError>
pub fn read_all( &self, filter_expr: &str, limit: usize, ) -> Result<Vec<HDict>, GraphError>
Run a filter and return matching entity dicts (cloned).
Sourcepub fn refs_from(&self, ref_val: &str, ref_type: Option<&str>) -> Vec<String>
pub fn refs_from(&self, ref_val: &str, ref_type: Option<&str>) -> Vec<String>
Get ref values that the given entity points to.
Sourcepub fn refs_to(&self, ref_val: &str, ref_type: Option<&str>) -> Vec<String>
pub fn refs_to(&self, ref_val: &str, ref_type: Option<&str>) -> Vec<String>
Get ref values of entities that point to the given entity.
Sourcepub fn changes_since(
&self,
version: u64,
) -> Result<Vec<GraphDiff>, ChangelogGap>
pub fn changes_since( &self, version: u64, ) -> Result<Vec<GraphDiff>, ChangelogGap>
Get changelog entries since a given version.
Returns Err(ChangelogGap) if the requested version has been evicted.
Sourcepub fn validate(&self) -> Vec<ValidationIssue>
pub fn validate(&self) -> Vec<ValidationIssue>
Validate all entities against the namespace and check for dangling refs.
Sourcepub fn ref_chain(&self, ref_val: &str, ref_tags: &[&str]) -> Vec<HDict>
pub fn ref_chain(&self, ref_val: &str, ref_tags: &[&str]) -> Vec<HDict>
Walk a chain of ref tags. See EntityGraph::ref_chain.
Sourcepub fn site_for(&self, ref_val: &str) -> Option<HDict>
pub fn site_for(&self, ref_val: &str) -> Option<HDict>
Resolve the site for any entity. See EntityGraph::site_for.
Sourcepub fn children(&self, ref_val: &str) -> Vec<HDict>
pub fn children(&self, ref_val: &str) -> Vec<HDict>
All direct children of an entity. See EntityGraph::children.
Sourcepub fn equip_points(
&self,
equip_ref: &str,
filter: Option<&str>,
) -> Result<Vec<HDict>, GraphError>
pub fn equip_points( &self, equip_ref: &str, filter: Option<&str>, ) -> Result<Vec<HDict>, GraphError>
All points for an equip, optionally filtered. See EntityGraph::equip_points.
Sourcepub fn hierarchy_tree(
&self,
root: &str,
max_depth: usize,
) -> Option<HierarchyNode>
pub fn hierarchy_tree( &self, root: &str, max_depth: usize, ) -> Option<HierarchyNode>
Build a hierarchy tree. See EntityGraph::hierarchy_tree.