Differentiate json null from no value for events

This commit is contained in:
Tony
2024-10-04 17:09:41 +08:00
parent 25d677d647
commit 7faf8c31e0
4 changed files with 26 additions and 18 deletions
+2 -1
View File
@@ -37,7 +37,8 @@ struct ChangePayload<'a> {
path: &'a Path,
resource_id: Option<u32>,
key: &'a str,
value: &'a JsonValue,
value: Option<&'a JsonValue>,
exists: bool,
}
#[derive(Debug)]
+8 -7
View File
@@ -296,7 +296,7 @@ impl<R: Runtime> StoreInner<R> {
let key = key.into();
let value = value.into();
self.cache.insert(key.clone(), value.clone());
let _ = self.emit_change_event(&key, &value);
let _ = self.emit_change_event(&key, Some(&value));
}
/// Returns a reference to the value corresponding to the key.
@@ -313,7 +313,7 @@ impl<R: Runtime> StoreInner<R> {
pub fn delete(&mut self, key: impl AsRef<str>) -> bool {
let flag = self.cache.remove(key.as_ref()).is_some();
if flag {
let _ = self.emit_change_event(key.as_ref(), &JsonValue::Null);
let _ = self.emit_change_event(key.as_ref(), None);
}
flag
}
@@ -325,7 +325,7 @@ impl<R: Runtime> StoreInner<R> {
let keys: Vec<String> = self.cache.keys().cloned().collect();
self.cache.clear();
for key in &keys {
let _ = self.emit_change_event(key, &JsonValue::Null);
let _ = self.emit_change_event(key, None);
}
}
@@ -336,13 +336,12 @@ impl<R: Runtime> StoreInner<R> {
if let Some(defaults) = &self.defaults {
for (key, value) in &self.cache {
if defaults.get(key) != Some(value) {
let _ =
self.emit_change_event(key, defaults.get(key).unwrap_or(&JsonValue::Null));
let _ = self.emit_change_event(key, defaults.get(key));
}
}
for (key, value) in defaults {
if !self.cache.contains_key(key) {
let _ = self.emit_change_event(key, value);
let _ = self.emit_change_event(key, Some(value));
}
}
self.cache.clone_from(defaults);
@@ -376,9 +375,10 @@ impl<R: Runtime> StoreInner<R> {
self.cache.is_empty()
}
fn emit_change_event(&self, key: &str, value: &JsonValue) -> crate::Result<()> {
fn emit_change_event(&self, key: &str, value: Option<&JsonValue>) -> crate::Result<()> {
let state = self.app.state::<StoreState>();
let stores = state.stores.lock().unwrap();
let exists = value.is_some();
self.app.emit(
"store://change",
ChangePayload {
@@ -386,6 +386,7 @@ impl<R: Runtime> StoreInner<R> {
resource_id: stores.get(&self.path).copied(),
key,
value,
exists,
},
)?;
Ok(())