}
}))().transpose()
).collect::<Result<Vec<_>,_>>()?;
- Ok(MGR::Pieces(pieces))
+ let pcaliases = ig.pcaliases.keys().cloned().collect();
+ Ok(MGR::Pieces { pieces, pcaliases })
})?,
MGI::UpdatePlayer {
insns.extend(setup_table(&ma, &table_spec)?);
}
- for p in chan.list_pieces()? {
+ let (pcs, aliases) = chan.list_pieces()?;
+ for p in pcs {
insns.push(MgmtGameInstruction::DeletePiece(p.piece));
}
+ for p in aliases {
+ insns.push(MgmtGameInstruction::DeletePieceAlias(p));
+ }
if let Some(table_size) = table_size {
insns.push(MGI::SetTableSize(table_size));
let args = parse_args::<Args,_>(args, &subargs, &ok_id, None);
let mut chan = access_game(&ma, &args.table_name)?;
- let pieces = chan.list_pieces()?;
+ let (pieces, _pcaliases) = chan.list_pieces()?;
let markers = pieces.iter().filter(|p| p.itemname == MAGIC)
.collect::<Vec<_>>();
Info(MgmtGameResponseGameInfo),
Synch(Generation),
- Pieces(Vec<MgmtGamePieceInfo>),
+ Pieces {
+ pieces: Vec<MgmtGamePieceInfo>,
+ pcaliases: BTreeSet<String>,
+ },
JoinGame {
nick: String,
}
#[throws(AE)]
- pub fn list_pieces(&mut self) -> Vec<MgmtGamePieceInfo> {
+ pub fn list_pieces(&mut self) -> (Vec<MgmtGamePieceInfo>, BTreeSet<String>) {
let insns = vec![ MGI::ListPieces ];
let mut responses = self.alter_game(insns, None)?;
match responses.as_mut_slice() {
- [MGR::Pieces(pieces)] => return mem::take(pieces),
+ [MGR::Pieces { pieces, pcaliases }] => return (
+ mem::take(pieces),
+ mem::take(pcaliases),
+ ),
wat => Err(anyhow!("ListPieces => {:?}", &wat))?,
}
}