From 667b98dbdd257764a3f81cacfcad8b200d39b950 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 22 May 2022 09:53:29 +0100 Subject: [PATCH] apitest: Introduce tree_walk; at-currency: test wip Signed-off-by: Ian Jackson --- apitest/apitest.rs | 29 +++++++++++++++++++++++++++++ apitest/at-currency.rs | 7 ++++++- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/apitest/apitest.rs b/apitest/apitest.rs index 91145c53..c1661e75 100644 --- a/apitest/apitest.rs +++ b/apitest/apitest.rs @@ -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(&self, #[allow(unused_mut,unused_variables)] mut f: F) + where F: FnMut(&[String], &JsV) -> Result<(),E> + { + #[throws(E)] + fn recurse(kl: &mut Vec, 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 -------------------- diff --git a/apitest/at-currency.rs b/apitest/at-currency.rs index 1776256d..65443fe0 100644 --- a/apitest/at-currency.rs +++ b/apitest/at-currency.rs @@ -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::(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; -- 2.30.2