diff options
Diffstat (limited to '')
-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> |