Skip to main content

SharedGraph

Struct SharedGraph 

Source
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§

Source§

impl SharedGraph

Source

pub fn new(graph: EntityGraph) -> Self

Wrap an EntityGraph in a thread-safe handle.

Source

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).

Source

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.

Source

pub fn subscriber_count(&self) -> usize

Number of active subscribers.

Source

pub fn read<F, R>(&self, f: F) -> R
where F: FnOnce(&EntityGraph) -> R,

Execute a closure with shared (read) access to the graph.

Source

pub fn write<F, R>(&self, f: F) -> R
where F: FnOnce(&mut EntityGraph) -> R,

Execute a closure with exclusive (write) access to the graph.

Source

pub fn add(&self, entity: HDict) -> Result<String, GraphError>

Add an entity. See EntityGraph::add.

Source

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.

Source

pub fn update(&self, ref_val: &str, changes: HDict) -> Result<(), GraphError>

Update an entity. See EntityGraph::update.

Source

pub fn remove(&self, ref_val: &str) -> Result<HDict, GraphError>

Remove an entity. See EntityGraph::remove.

Source

pub fn read_filter( &self, filter_expr: &str, limit: usize, ) -> Result<HGrid, GraphError>

Run a filter expression and return a grid.

Source

pub fn len(&self) -> usize

Number of entities.

Source

pub fn is_empty(&self) -> bool

Returns true if the graph has no entities.

Source

pub fn all_entities(&self) -> Vec<HDict>

Return all entities as owned clones.

Source

pub fn contains(&self, ref_val: &str) -> bool

Check if an entity with the given ref value exists.

Source

pub fn version(&self) -> u64

Current graph version.

Source

pub fn read_all( &self, filter_expr: &str, limit: usize, ) -> Result<Vec<HDict>, GraphError>

Run a filter and return matching entity dicts (cloned).

Source

pub fn refs_from(&self, ref_val: &str, ref_type: Option<&str>) -> Vec<String>

Get ref values that the given entity points to.

Source

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.

Source

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.

Source

pub fn validate(&self) -> Vec<ValidationIssue>

Validate all entities against the namespace and check for dangling refs.

See EntityGraph::validate.

Source

pub fn ref_chain(&self, ref_val: &str, ref_tags: &[&str]) -> Vec<HDict>

Walk a chain of ref tags. See EntityGraph::ref_chain.

Source

pub fn site_for(&self, ref_val: &str) -> Option<HDict>

Resolve the site for any entity. See EntityGraph::site_for.

Source

pub fn children(&self, ref_val: &str) -> Vec<HDict>

All direct children of an entity. See EntityGraph::children.

Source

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.

Source

pub fn hierarchy_tree( &self, root: &str, max_depth: usize, ) -> Option<HierarchyNode>

Build a hierarchy tree. See EntityGraph::hierarchy_tree.

Source

pub fn classify(&self, ref_val: &str) -> Option<String>

Classify an entity. See EntityGraph::classify.

Trait Implementations§

Source§

impl Clone for SharedGraph

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Default for SharedGraph

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.