diff options
author | 2025-06-07 17:36:22 +0100 | |
---|---|---|
committer | 2025-06-07 17:36:22 +0100 | |
commit | 36e87b708ed3a2b0d6f2e932509b0fdf10fe0089 (patch) | |
tree | 5f3fc5a3d863f52a82a204a7746532202103d7cc /src/state_store.rs | |
parent | 4a5aa6579f5184c443ffbe80ce93e0daa0926826 (diff) | |
download | macaw-web-36e87b708ed3a2b0d6f2e932509b0fdf10fe0089.tar.gz macaw-web-36e87b708ed3a2b0d6f2e932509b0fdf10fe0089.tar.bz2 macaw-web-36e87b708ed3a2b0d6f2e932509b0fdf10fe0089.zip |
Diffstat (limited to 'src/state_store.rs')
-rw-r--r-- | src/state_store.rs | 68 |
1 files changed, 42 insertions, 26 deletions
diff --git a/src/state_store.rs b/src/state_store.rs index ac90e40..7e6e6a1 100644 --- a/src/state_store.rs +++ b/src/state_store.rs @@ -112,35 +112,51 @@ where V: Send + Sync + 'static, { pub fn store(&self, key: K, value: V) -> StateListener<K, V> { - { - let store = self.inner.try_get_value().unwrap(); - let mut store = store.store.write().unwrap(); - debug!("store state: {:?}", store); - if let Some((v, count)) = store.get_mut(&key) { - debug!("updating old value already in store"); - v.set(value); - *count += 1; - StateListener { - value: v.clone(), - cleaner: StateCleaner { - key, - state_store: self.clone(), - }, - } - } else { - let v = ArcRwSignal::new(value); - store.insert(key.clone(), (v.clone(), 1)); - debug!("inserting new value: {:?}", store); - StateListener { - value: v.into(), - cleaner: StateCleaner { - key, - state_store: self.clone(), - }, - } + let store = self.inner.try_get_value().unwrap(); + let mut store = store.store.write().unwrap(); + debug!("store state: {:?}", store); + if let Some((v, count)) = store.get_mut(&key) { + debug!("updating old value already in store"); + v.set(value); + *count += 1; + StateListener { + value: v.clone(), + cleaner: StateCleaner { + key, + state_store: self.clone(), + }, + } + } else { + let v = ArcRwSignal::new(value); + store.insert(key.clone(), (v.clone(), 1)); + debug!("inserting new value: {:?}", store); + StateListener { + value: v.into(), + cleaner: StateCleaner { + key, + state_store: self.clone(), + }, } } } + + pub fn get_listener(&self, key: K) -> Option<StateListener<K, V>> { + let store = self.inner.try_get_value().unwrap(); + let mut store = store.store.write().unwrap(); + debug!("store state: {:?}", store); + if let Some((v, count)) = store.get_mut(&key) { + *count += 1; + Some(StateListener { + value: v.clone(), + cleaner: StateCleaner { + key, + state_store: self.clone(), + }, + }) + } else { + None + } + } } impl<K, V> StateStore<K, V> |