-> PieceUpdate
{
// fallible part
- let (update, occids): (_, OldNew<Option<OccId>>) = {
+ let (puos, log, occids): (_, _, OldNew<Option<OccId>>) = {
let nopiece = || internal_logic_error("piece vanished");
let ipc = ipieces.get(piece).ok_or_else(nopiece)?;
let gpc = gs.pieces.get(piece).ok_or_else(nopiece)?;
},
};
- let update = PieceUpdate {
- wrc: WRC::Unpredictable,
- ops: PieceUpdateOps::PerPlayer(puos),
- log,
- };
-
let occids = occulteds.map(|h| h.as_ref().map(|h| h.occid));
- (update, occids)
+ (puos, log, occids)
};
// point of no return
gs.pieces.byid_mut(piece).unwrap().occult.passive = *occids.new();
})(); // <- no ?, infallible commitment
- update
+ PieceUpdate {
+ wrc: WRC::Unpredictable,
+ ops: PieceUpdateOps::PerPlayer(puos),
+ log,
+ }
}
#[throws(InternalError)]