None, ig)
},
+ 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);
+ (U{ pcs: vec![], log: vec![], raw: None },
+ MGR::VisiblePieceId(vpid),
+ None, ig)
+ },
+ 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);
+ (U{ pcs: vec![], log: vec![], raw: None },
+ MGR::InternalPieceId(piece),
+ None, ig)
+ },
+
MGI::ListPieces => readonly(cs,ag,ig, &[TP::ViewNotSecret], |ig|{
let ioccults = &ig.ioccults;
let pieces = ig.gs.pieces.iter().filter_map(
pub enum MgmtGameInstruction {
Noop,
Info,
- /// For testing, mostly.
- Synch,
SetTableSize(Pos),
SetTableColour(ColourSpec),
+ /// For testing, mostly.
+ Synch,
+ /// For testing only
+ PieceIdLookupFwd { piece: PieceId, player: PlayerId, },
+ /// For testing only
+ PieceIdLookupRev { vpid: VisiblePieceId, player: PlayerId, },
+
ListPieces,
AddPieces(PiecesSpec),
DeletePiece(PieceId),
Info(MgmtGameResponseGameInfo),
Synch(Generation),
+ InternalPieceId(Option<PieceId>),
+ VisiblePieceId(Option<VisiblePieceId>),
+
Pieces {
pieces: Vec<MgmtGamePieceInfo>,
pcaliases: BTreeSet<String>,