From: Ian Jackson Date: Mon, 6 Jul 2020 17:15:43 +0000 (+0100) Subject: redo ungrab as api X-Git-Tag: otter-0.2.0~1422 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=e68b87461c1aca4a17866d985285a15d76e4359a;p=otter.git redo ungrab as api --- diff --git a/src/bin/server.rs b/src/bin/server.rs index be3d98ca..144c39e4 100644 --- a/src/bin/server.rs +++ b/src/bin/server.rs @@ -266,16 +266,37 @@ impl ApiPieceOp for ApiPieceGrab { (update, vec![logent]) } } + #[derive(Debug,Serialize,Deserialize)] -struct ApiUngrab { - t : String, - p : VisiblePieceId, +struct ApiPieceUngrab { } #[post("/_/api/ungrab", format="json", data="
")] #[throws(OE)] -fn api_ungrab(form : Json) -> impl response::Responder<'static> { - eprintln!("API {:?}", &form); - "" +fn api_ungrab(form : Json>) + -> impl response::Responder<'static> { + api_piece_op(form) +} +impl ApiPieceOp for ApiPieceUngrab { + #[throws(GameError)] + fn op(&self, gs: &mut GameState, player: PlayerId, piece: PieceId, + lens: &dyn Lens) + -> (PieceUpdateOp<()>, Vec) { + let pl = gs.players.byid(player).unwrap(); + let pc = gs.pieces.byid_mut(piece).unwrap(); + + if pc.held != Some(player) { Err(GameError::PieceHeld)? } + pc.held = None; + + let update = PieceUpdateOp::Modify(()); + + let logent = LogEntry { + html : format!("{} released {}", + &htmlescape::encode_minimal(&pl.nick), + pc.describe_html(&lens.log_pri(piece, pc))), + }; + + (update, vec![logent]) + } } #[derive(Debug,Serialize,Deserialize)]