From: Ian Jackson Date: Sun, 4 Apr 2021 17:32:54 +0000 (+0100) Subject: apitest: Make setup_static_users less lifetimes-entangled X-Git-Tag: otter-0.5.0~248 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=deb28499380fd1c407fa1b83c2ea803514692db8;p=otter.git apitest: Make setup_static_users less lifetimes-entangled Signed-off-by: Ian Jackson --- diff --git a/apitest/apitest.rs b/apitest/apitest.rs index 27c0f873..fa3b3327 100644 --- a/apitest/apitest.rs +++ b/apitest/apitest.rs @@ -725,10 +725,8 @@ pub struct StaticUserSetup { impl DirSubst { #[throws(AE)] - pub fn setup_static_users - Result> - (&mut self, layout: PresentationLayout, mut f: F) - -> Vec + pub fn setup_static_users(&mut self, layout: PresentationLayout) + -> Vec { #[throws(AE)] fn mk(su: &DirSubst, layout: PresentationLayout, u: StaticUser) @@ -755,13 +753,12 @@ impl DirSubst { StaticUser::iter().map( |u| (||{ let ssu = mk(self, layout, u).context("create")?; - let w = f(ssu).context("set up")?; - Ok::<_,AE>(w) + Ok::<_,AE>(ssu) })() .with_context(|| format!("{:?}", u)) .context("make static user") ) - .collect::,AE>>()? + .collect::,AE>>()? } } diff --git a/apitest/at-otter.rs b/apitest/at-otter.rs index 7acb3b14..e5ffb3da 100644 --- a/apitest/at-otter.rs +++ b/apitest/at-otter.rs @@ -646,11 +646,10 @@ fn main() { &mut |_|false )?; let spec = su.ds.game_spec_data()?; - let [alice, bob]: [Player; 2] = su.ds.setup_static_users( - default(), - |sus| Ok(Player { nick: sus.nick, url: sus.url }) - )? - .try_into().unwrap(); + let [alice, bob]: [Player; 2] = + su.ds.setup_static_users(default())? + .into_iter().map(|sus| Player { nick: sus.nick, url: sus.url }) + .collect::>().into_inner().unwrap(); let su_rc = Rc::new(RefCell::new(su)); tests(Ctx { opts, spec, su_rc, alice, bob })?; diff --git a/wdriver/wdriver.rs b/wdriver/wdriver.rs index 171389f7..8a8b8e50 100644 --- a/wdriver/wdriver.rs +++ b/wdriver/wdriver.rs @@ -674,12 +674,16 @@ pub fn setup(exe_module_path: &str) -> (Setup, Instance) { impl Setup { #[throws(AE)] pub fn setup_static_users(&mut self, instance: &Instance) -> Vec { - self.core.ds.clone().setup_static_users(self.opts.layout, |sus|{ + self.core.ds.clone() + .setup_static_users(self.opts.layout)? + .into_iter().map(|sus| + { let w = self.new_window(instance, sus.nick)?; self.w(&w)?.get(sus.url)?; self.w(&w)?.screenshot("initial", log::Level::Trace)?; - Ok(w) - })? + Ok::<_,AE>(w) + }) + .collect::>()? } }