From 953972c0aa1fee5ffdde88c813c3caca6d183b7c Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sun, 21 Feb 2021 18:10:40 +0000 Subject: [PATCH] ListPieces refactor prep for fallible: Make closure return a Result Signed-off-by: Ian Jackson --- daemon/cmdlistener.rs | 45 +++++++++++++++++++++++-------------------- 1 file changed, 24 insertions(+), 21 deletions(-) diff --git a/daemon/cmdlistener.rs b/daemon/cmdlistener.rs index 1d6a8c0f..2a1d5ac7 100644 --- a/daemon/cmdlistener.rs +++ b/daemon/cmdlistener.rs @@ -375,27 +375,30 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>( }, MGI::ListPieces => readonly(cs,ag,ig, &[TP::ViewNotSecret], |ig|{ - let pieces = ig.gs.pieces.iter().filter_map(|(piece,p)| if_chain!{ - let &PieceState { pos, face, .. } = p; - if let Some(pinfo) = ig.ipieces.get(piece); - let desc_html = pinfo.describe_html_infallible(None, p); - let itemname = pinfo.itemname().to_string(); - let bbox = pinfo.bbox_approx(); - let visible = if ! piece_at_all_occluded(&ig.gs.occults, piece) { - Some(MgmtGamePieceVisibleInfo { - pos, face, desc_html, bbox - }) - } else { - None - }; - then { - Some(MgmtGamePieceInfo { - piece, itemname, - visible - }) - } - else { None } - }).collect(); + let pieces = ig.gs.pieces.iter().filter_map( + |(piece,p)| (|| Ok::<_,MgmtError>(if_chain!{ + let &PieceState { pos, face, .. } = p; + if let Some(pinfo) = ig.ipieces.get(piece); + let desc_html = pinfo.describe_html_infallible(None, p); + let itemname = pinfo.itemname().to_string(); + let bbox = pinfo.bbox_approx(); + let visible = if ! piece_at_all_occluded(&ig.gs.occults, piece) { + Some(MgmtGamePieceVisibleInfo { + pos, face, desc_html, bbox + }) + } else { + None + }; + then { + Some(MgmtGamePieceInfo { + piece, itemname, + visible + }) + } else { + None + } + }))().transpose() + ).collect::,_>>()?; Ok(MGR::Pieces(pieces)) })?, -- 2.30.2