chiark / gitweb /
apitest: Introduce tree_walk; at-currency: test wip
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 22 May 2022 08:53:29 +0000 (09:53 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 22 May 2022 08:53:46 +0000 (09:53 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
apitest/apitest.rs
apitest/at-currency.rs

index 91145c53678d0c946a74b395bbd6af2b8e9da8c9..c1661e751f1e9e69c40a1cf61555afaa156b9451 100644 (file)
@@ -142,6 +142,35 @@ impl JsV {
     let i = i.into_iter().map(|(k,v)| (k.into(), v.borrow().clone()));
     self.as_object_mut().unwrap().extend(i);
   }
+
+  #[throws(E)]
+  fn tree_walk<F,E>(&self, #[allow(unused_mut,unused_variables)] mut f: F)
+  where F: FnMut(&[String], &JsV) -> Result<(),E>
+  {
+    #[throws(E)]
+    fn recurse<F,E>(kl: &mut Vec<String>, v: &JsV, f: &mut F)
+    where F: FnMut(&[String], &JsV) -> Result<(),E> {
+      f(&**kl, v)?;
+      if let Some(o) = v.as_object() {
+        for (k,v) in o {
+          kl.push(k.to_owned());
+          let y = recurse(kl, v, f);
+          kl.pop();
+          let () = y?;
+        }
+      } else if let Some(a) = v.as_array() {
+        for (k,v) in a.iter().enumerate() {
+          kl.push(k.to_string());
+          let y = recurse(kl, v, f);
+          kl.pop();
+          let () = y?;
+        }
+      }
+    }
+
+    let mut kl = vec![];
+    recurse(&mut kl, self, &mut f)?
+  }
 }
 
 // -------------------- Substition --------------------
index 1776256da47366ff20132a939915f5764456f5b7..65443fe07cbdb83d8b7345dbecae5eb09d322c10 100644 (file)
@@ -90,7 +90,12 @@ impl Ctx {
     alice.synchu(&mut a_pieces)?;
     // aside has 90, in hand has 9, original hand pos has 309
 
-    bob.synch()?;
+    bob.synchx::<PIB,_>(None, None, |_session, gen, _k, v| v.tree_walk(|k,v| {
+      if let Some(s) = v.as_str() {
+        eprintln!("{} {:?} {:?}", gen, k, s);
+      }
+      Ok::<_,Void>(())
+    }).void_unwrap())?;
 
     let _ = &mut bob;
     let _ = bob;