chiark / gitweb /
wasm: RegionList: Have methods return a `changed` bool
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 25 Mar 2021 14:57:13 +0000 (14:57 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 25 Mar 2021 14:57:13 +0000 (14:57 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
wasm/wasm.rs

index 00f9c3794028855cb36599214780a70bda2948fb..e72792074b74e233e84ad21e249fa28cebeba223 100644 (file)
@@ -153,22 +153,26 @@ pub fn empty_region_list() -> RegionList { RegionList(default()) }
 #[wasm_bindgen]
 impl RegionList {
   pub fn insert(&mut self, piece: JsValue, region: JsValue)
-                -> Result<(), JsValue>
+                -> Result<bool, JsValue>
   {
     let piece  = piece .as_string().ok_or(BadRegionArguments).e()?;
     let region = region.as_string().ok_or(BadRegionArguments).e()?;
     let region: RegionC<Number> = serde_json::from_str(&region)
       .map_err(|_| BadRegionArguments).e()?;
-    self.0.insert(piece, region);
-    Ok(())
+    let changed = match self.0.insert(piece, region.clone()) {
+      Some(old_region) => old_region != region,
+      None => true,
+    };
+    Ok(changed)
   }
 
   pub fn remove(&mut self, piece: JsValue)
-                -> Result<(), JsValue>
+                -> Result<bool, JsValue>
   {
     let piece  = piece .as_string().ok_or(BadRegionArguments).e()?;
-    self.0.remove(&piece);
-    Ok(())
+    let was = self.0.remove(&piece);
+    let changed = was.is_some();
+    Ok(changed)
   }
 
   pub fn contains_pos(&mut self, x: Number, y: Number) -> bool {