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 --------------------
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;