type ExecuteGameInsnResults<'igr, 'ig> = (
ExecuteGameChangeUpdates,
MgmtGameResponse,
+ Option<Void>,
&'igr mut InstanceGuard<'ig>,
);
{
let (ig, _) = cs.check_acl(ag, ig, PCH::Instance, p)?;
let resp = f(ig)?;
- (U{ pcs: vec![], log: vec![], raw: None }, resp, ig)
+ (U{ pcs: vec![], log: vec![], raw: None }, resp, None, ig)
}
#[throws(MgmtError)]
(U{ log,
pcs: vec![],
raw: Some(vec![ PreparedUpdateEntry::SetLinks(ig.links.clone()) ])},
- Fine, ig)
+ Fine, None, ig)
}
impl<'cs> CommandStream<'cs> {
&who.0, size.0[0], size.0[1])),
}],
raw: Some(vec![ PreparedUpdateEntry::SetTableSize(size) ]) },
- Fine, ig)
+ Fine, None, ig)
}
MGI::SetTableColour(colour) => {
&who.0, &colour.0)),
}],
raw: Some(vec![ PreparedUpdateEntry::SetTableColour(colour) ]) },
- Fine, ig)
+ Fine, None, ig)
}
MGI::JoinGame {
log: vec![ logentry ],
raw: Some(vec![ update ] )},
MGR::JoinGame { nick, player, token: atr },
- ig)
+ None, ig)
},
MGI::Synch => {
log: vec![], // return no update info
raw: None },
MGR::Synch(gen),
- ig)
+ None, ig)
},
MGI::ListPieces => readonly(cs,ag,ig, &[TP::ViewNotSecret], |ig|{
(U{ log,
pcs: vec![],
raw: None},
- Fine, ig)
+ Fine, None, ig)
},
MGI::Info => readonly(cs,ag,ig, &[TP::ViewNotSecret], |ig|{
(U{ pcs: vec![],
log: vec![],
raw: None },
- MGR::PlayerAccessToken(token), ig)
+ MGR::PlayerAccessToken(token), None, ig)
}
MGI::RedeliverPlayerAccess(player) => {
(U{ pcs: vec![],
log: vec![],
raw: None },
- MGR::PlayerAccessToken(token), ig)
+ MGR::PlayerAccessToken(token), None, ig)
},
MGI::LeaveGame(player) => {
(U{ pcs: vec![],
log: vec![ LogEntry { html }],
raw: Some(vec![ update ]) },
- Fine, ig)
+ Fine, None, ig)
},
MGI::DeletePiece(piece) => {
desc_html.0)),
}],
raw: None },
- Fine, ig_g)
+ Fine, None, ig_g)
},
MGI::AddPieces(PiecesSpec{ pos,posd,count,face,pinned,angle,info }) => {
html: Html(format!("{} added {} pieces", &who.0, count_len)),
}],
raw: None },
- Fine, ig_g)
+ Fine, None, ig_g)
},
MGI::ClearLog => {
html: Html(format!("{} cleared the log", &who.0)),
} ],
raw: None },
- Fine, ig)
+ Fine, None, ig)
},
MGI::SetACL { acl } => {
(U{ pcs: vec![ ],
log,
raw: Some(updates) },
- Fine, ig)
+ Fine, None, ig)
},
};
Ok(y)
};
let res = (||{
for insn in insns.drain(0..) {
- let (updates, resp, ig) = execute_game_insn(cs, ag, igu, insn, &who,
- &mut to_permute)?;
+ let (updates, resp, for_prepub, ig) =
+ execute_game_insn(cs, ag, igu, insn, &who, &mut to_permute)?;
uh.accumulate(ig, updates)?;
responses.push(resp);
+ match for_prepub { None => (), Some(x) => match x { }};
auth = Some(Authorisation::authorised(&*ig.name));
}
if let Some(auth) = auth { uh.complete(igu.by_mut(auth), &who)?; }