From 677547bdd532a23d7280344e02cf0d280fea6cb1 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Thu, 13 May 2021 10:04:29 +0100 Subject: [PATCH] Game updates: Make reset_game from clear_game Signed-off-by: Ian Jackson --- daemon/cmdlistener.rs | 46 +++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/daemon/cmdlistener.rs b/daemon/cmdlistener.rs index 5bc9c77f..1eb5e218 100644 --- a/daemon/cmdlistener.rs +++ b/daemon/cmdlistener.rs @@ -445,11 +445,13 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>( } #[throws(MgmtError)] - fn clear_game<'igr, 'ig: 'igr, 'cs>( + fn reset_game<'igr, 'ig: 'igr, 'cs>( cs: &'cs CommandStreamData, ag: &'_ mut AccountsGuard, ig: &'igr mut Unauthorised, InstanceName>, - ) -> (&'igr mut InstanceGuard<'ig>, Vec) + f: Box) + -> Result + '_> + ) -> ExecuteGameInsnResults<'igr, 'ig> { let ig = cs.check_acl(&ag, ig, PCH::Instance, &[TP::ChangePieces])?.0; @@ -462,7 +464,13 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>( insns.push(MGI::DeletePiece(piece)); } - (ig, insns) + let logent = f(ig, &mut insns)?; + + (U{ pcs: vec![], + log: vec![ logent ], + raw: None }, + MGR::InsnExpanded, + None, insns, ig) } impl<'cs> CommandStreamData<'cs> { @@ -570,24 +578,20 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>( } = toml_de::from_value(&spec) .map_err(|e: toml_de::Error| ME::TomlStructureError(e.to_string()))?; - let (ig, mut insns) = clear_game(cs,ag,ig)?; - - // Define new stuff - for (alias, target) in pcaliases.into_iter() { - insns.push(MGI::DefinePieceAlias{ alias, target }); - } - insns.push(MGI::ClearLog); - insns.push(MGI::SetTableSize(table_size)); - insns.push(MGI::SetTableColour(table_colour)); - for pspec in pieces.into_iter() { - insns.push(MGI::AddPieces(pspec)); - } - let html = hformat!("{} reset the game", &who); - (U{ pcs: vec![], - log: vec![ LogEntry { html } ], - raw: None }, - MGR::InsnExpanded, - None, insns, ig) + reset_game(cs,ag,ig, Box::new(|_ig, insns|{ + // Define new stuff: + for (alias, target) in pcaliases.into_iter() { + insns.push(MGI::DefinePieceAlias{ alias, target }); + } + insns.push(MGI::ClearLog); + insns.push(MGI::SetTableSize(table_size)); + insns.push(MGI::SetTableColour(table_colour)); + for pspec in pieces.into_iter() { + insns.push(MGI::AddPieces(pspec)); + } + let html = hformat!("{} reset the game", &who); + Ok(LogEntry { html }) + }))? } MGI::InsnMark(token) => { -- 2.30.2