chiark / gitweb /
apitest: updates: Refactor findp again
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 1 May 2022 17:32:24 +0000 (18:32 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 1 May 2022 17:47:41 +0000 (18:47 +0100)
I keep shilly-shallying.  I think I want this to be called all the time.

Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
apitest/atmain.rs

index 9c1205a40b76009869f91e27897cf64371161945..4da0099972203ece72ebdd1115188912baff759a 100644 (file)
@@ -415,20 +415,22 @@ pub fn update_update_pieces<PI:Idx>(
     )
   }
 
-  fn findp<'p, PI:Idx>(pieces: &'p mut Pieces<PI>, piece: &'_ str)
-               -> &'p mut PieceInfo<JsV> {
-    pieces.iter_mut().find(|p| p.id == piece).unwrap()
+  fn findp<'p, PI:Idx>(pieces: &'p mut Pieces<PI>,
+                       v: &'_ serde_json::Map<String,JsV>)
+                       -> Option<&'p mut PieceInfo<JsV>> {
+    let piece = v.get("piece")?.as_str()?;
+    pieces.iter_mut().find(|p| p.id == piece)
   }
 
   let v = v.as_object().unwrap();
 
   if k == "Recorded" {
-    let p = findp(pieces, v["piece"].as_str().unwrap());
+    let p = findp(pieces, v).unwrap();
     for k in ["zg", "svg"] {
       p.info.set(k, &v[k]);
     }
   } else if k == "Piece" {
-    let p = findp(pieces, v["piece"].as_str().unwrap());
+    let p = findp(pieces, v).unwrap();
     let (op, d) = v["op"].as_object().unwrap().iter().next().unwrap();
 
     match op.as_str() {