From: Ian Jackson Date: Fri, 2 Oct 2020 23:23:50 +0000 (+0100) Subject: implement pin op X-Git-Tag: otter-0.2.0~795 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=a1f9c4a5bf5a9a0f6c22a8a77806b3b2e9e6f8c2;p=otter.git implement pin op Signed-off-by: Ian Jackson --- diff --git a/src/api.rs b/src/api.rs index a4c313e7..051b2bf1 100644 --- a/src/api.rs +++ b/src/api.rs @@ -312,6 +312,31 @@ impl ApiPieceOp for ApiPieceMove { } } +#[derive(Debug,Serialize,Deserialize)] +struct ApiPiecePin (bool); +#[post("/_/api/pin", format="json", data="
")] +#[throws(OE)] +fn api_pin(form : Json>) -> impl response::Responder<'static> { + api_piece_op(form) +} +impl ApiPieceOp for ApiPiecePin { + fn op(&self, gs: &mut GameState, player: PlayerId, piece: PieceId, + p: &dyn Piece, lens: &dyn Lens) -> Result { + let pc = gs.pieces.byid_mut(piece).unwrap(); + let pl = gs.players.byid(player).unwrap(); + pc.pinned = self.0; + let update = PieceUpdateOp::Modify(()); + let logents = vec![ LogEntry { html: Html(format!( + "{} {} {}", + &htmlescape::encode_minimal(&pl.nick), + if pc.pinned { "pinned" } else { "unpinned" }, + p.describe_pri(&lens.log_pri(piece, pc)).0 + ))}]; + Ok((WhatResponseToClientOp::Predictable, + update, logents)) + } +} + const DEFKEY_FLIP : UoKey = 'f'; #[derive(Debug,Serialize,Deserialize)]