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).
Implementations§
Sourcepub fn new(graph: EntityGraph) -> Self
pub fn new(graph: EntityGraph) -> Self
Wrap an EntityGraph in a thread-safe handle.
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) -> Vec<GraphDiff>
pub fn changes_since(&self, version: u64) -> Vec<GraphDiff>
Get changelog entries since a given version.
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.
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