Skip to main content

StateStore

Struct StateStore 

Source
pub struct StateStore<Id>
where Id: Clone + Eq + Hash + Send + Sync + 'static,
{ /* private fields */ }
Expand description

Generic state store for managing entity properties with change detection

The store is generic over the entity ID type, allowing it to be used with any identifier (strings, custom IDs, etc.).

§Features

  • Type-safe property storage and retrieval
  • Change detection (only emits events when values actually change)
  • Watch pattern (register interest in property changes)
  • Blocking iteration over change events

§Example

use state_store::{StateStore, Property};

#[derive(Clone, PartialEq, Debug)]
struct Temperature(f32);
impl Property for Temperature {
    const KEY: &'static str = "temperature";
}

let store = StateStore::<String>::new();
let sensor_id = "sensor-1".to_string();

// Watch for temperature changes on sensor-1
store.watch(sensor_id.clone(), Temperature::KEY);

// Set temperature (will emit change event since watched)
store.set(&sensor_id, Temperature(72.5));

// Get current value
let temp = store.get::<Temperature>(&sensor_id);
assert_eq!(temp, Some(Temperature(72.5)));

Implementations§

Source§

impl<Id> StateStore<Id>
where Id: Clone + Eq + Hash + Send + Sync + 'static,

Source

pub fn new() -> Self

Create a new empty state store

Source

pub fn get<P: Property>(&self, entity_id: &Id) -> Option<P>

Get a property value for an entity

Returns None if the entity doesn’t exist or the property isn’t set.

Source

pub fn set<P: Property>(&self, entity_id: &Id, value: P)

Set a property value for an entity

If the value changes and the property is being watched, a change event is emitted.

Source

pub fn watch(&self, entity_id: Id, property_key: &'static str)

Register interest in a property for an entity

After watching, changes to this property will appear in iter().

Source

pub fn unwatch(&self, entity_id: &Id, property_key: &'static str)

Unregister interest in a property

Source

pub fn is_watched(&self, entity_id: &Id, property_key: &'static str) -> bool

Check if a property is being watched

Source

pub fn iter(&self) -> ChangeIterator<Id>

Create a blocking iterator over change events

Only emits events for properties that have been watched.

Source

pub fn entity_count(&self) -> usize

Get the number of entities in the store

Source

pub fn is_empty(&self) -> bool

Check if the store is empty

Source

pub fn entity_ids(&self) -> Vec<Id>

Get all entity IDs

Source

pub fn remove_entity(&self, entity_id: &Id) -> bool

Remove an entity and all its properties

Source

pub fn clear(&self)

Clear all entities and properties

Source

pub fn event_sender(&self) -> Sender<ChangeEvent<Id>>

Get the event sender for external event injection

This is useful for testing or for injecting events from external sources (e.g., network callbacks).

Trait Implementations§

Source§

impl<Id> Clone for StateStore<Id>
where Id: Clone + Eq + Hash + Send + Sync + 'static,

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<Id> Debug for StateStore<Id>
where Id: Clone + Eq + Hash + Send + Sync + Debug + 'static,

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<Id> Default for StateStore<Id>
where Id: Clone + Eq + Hash + Send + Sync + 'static,

Source§

fn default() -> Self

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

Auto Trait Implementations§

§

impl<Id> Freeze for StateStore<Id>

§

impl<Id> RefUnwindSafe for StateStore<Id>

§

impl<Id> Send for StateStore<Id>

§

impl<Id> Sync for StateStore<Id>

§

impl<Id> Unpin for StateStore<Id>

§

impl<Id> UnsafeUnpin for StateStore<Id>

§

impl<Id> UnwindSafe for StateStore<Id>

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