From 04e21dc74aeb2f32b08671e6fbcca96c2dad4fc0 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 4 Apr 2021 16:47:57 +0100 Subject: [PATCH] cmdlistener: Break out pieceid_lookup Signed-off-by: Ian Jackson --- daemon/cmdlistener.rs | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/daemon/cmdlistener.rs b/daemon/cmdlistener.rs index a80795ac..f56dbacf 100644 --- a/daemon/cmdlistener.rs +++ b/daemon/cmdlistener.rs @@ -307,6 +307,23 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>( (U{ pcs: vec![], log: vec![], raw: None }, resp, None, ig) } + #[throws(MgmtError)] + fn pieceid_lookup<'igr, 'ig: 'igr, 'cs, + F: FnOnce(&PerPlayerIdMap) -> MGR> + ( + cs: &'cs CommandStream, + ig: &'igr mut Unauthorised, InstanceName>, + player: PlayerId, + f: F, + ) -> ExecuteGameInsnResults<'igr, 'ig> + { + let superuser = cs.superuser.ok_or(ME::SuperuserAuthorisationRequired)?; + let ig = ig.by_mut(superuser.into()); + let gpl = ig.gs.players.byid(player)?; + let resp = f(&gpl.idmap); + no_updates(ig, resp) + } + #[throws(MgmtError)] fn update_links<'igr, 'ig: 'igr, 'cs, F: FnOnce(&mut Arc) -> Result> @@ -430,18 +447,16 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>( }, MGI::PieceIdLookupFwd { player, piece } => { - let superuser = cs.superuser.ok_or(ME::SuperuserAuthorisationRequired)?; - let ig = ig.by_mut(superuser.into()); - let gpl = ig.gs.players.byid(player)?; - let vpid = gpl.idmap.fwd(piece); - no_updates(ig, MGR::VisiblePieceId(vpid)) + pieceid_lookup( + cs, ig, player, + |ppidm| MGR::VisiblePieceId(ppidm.fwd(piece)) + )? }, MGI::PieceIdLookupRev { player, vpid } => { - let superuser = cs.superuser.ok_or(ME::SuperuserAuthorisationRequired)?; - let ig = ig.by_mut(superuser.into()); - let gpl = ig.gs.players.byid(player)?; - let piece = gpl.idmap.rev(vpid); - no_updates(ig, MGR::InternalPieceId(piece)) + pieceid_lookup( + cs, ig, player, + |ppidm| MGR::InternalPieceId(ppidm.rev(vpid)) + )? }, MGI::ListPieces => readonly(cs,ag,ig, &[TP::ViewNotSecret], |ig|{ -- 2.30.2