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 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 entities_fitting(&self, spec_name: &str) -> Vec<HDict>
pub fn entities_fitting(&self, spec_name: &str) -> Vec<HDict>
Find all entities that structurally fit a spec/type name.
Returns owned clones. See EntityGraph::entities_fitting.
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 all_edges(&self) -> Vec<(String, String, String)>
pub fn all_edges(&self) -> Vec<(String, String, String)>
Return all edges as (source_ref, ref_tag, target_ref) tuples.
Sourcepub fn neighbors(
&self,
ref_val: &str,
hops: usize,
ref_types: Option<&[&str]>,
) -> (Vec<HDict>, Vec<(String, String, String)>)
pub fn neighbors( &self, ref_val: &str, hops: usize, ref_types: Option<&[&str]>, ) -> (Vec<HDict>, Vec<(String, String, String)>)
BFS neighborhood: entities and edges within hops of ref_val.
Sourcepub fn shortest_path(&self, from: &str, to: &str) -> Vec<String>
pub fn shortest_path(&self, from: &str, to: &str) -> Vec<String>
BFS shortest path from from to to.
Sourcepub fn subtree(&self, root: &str, max_depth: usize) -> Vec<(HDict, usize)>
pub fn subtree(&self, root: &str, max_depth: usize) -> Vec<(HDict, usize)>
Subtree rooted at root up to max_depth levels.
Returns entities with their depth from root.
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>) -> Vec<HDict>
pub fn equip_points(&self, equip_ref: &str, filter: Option<&str>) -> Vec<HDict>
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.
Trait Implementations§
Auto Trait Implementations§
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more