#[serde(flatten)]
op : O,
}
-#[derive(Debug,Serialize,Deserialize)]
-struct ApiPieceGrab {
-}
trait ApiPieceOp : Debug {
#[throws(GameError)]
fn op(&self, gs: &mut GameState, player: PlayerId, piece: PieceId,
}
}
-impl ApiPieceOp for ApiPieceGrab {
- #[throws(GameError)]
- fn op(&self, gs: &mut GameState, player: PlayerId, piece: PieceId,
- lens: &dyn Lens)
- -> (PieceUpdateOp<()>, Vec<LogEntry>) {
- let pl = gs.players.byid(player).unwrap();
- let pc = gs.pieces.byid_mut(piece).unwrap();
-
- if pc.held.is_some() { Err(GameError::PieceHeld)? }
- pc.held = Some(player);
-
- let update = PieceUpdateOp::Modify(());
-
- let logent = LogEntry {
- html : format!("{} grasped {}",
- &htmlescape::encode_minimal(&pl.nick),
- pc.describe_html(&lens.log_pri(piece, pc))),
- };
-
- (update, vec![logent])
- }
-}
-
#[throws(OE)]
fn api_piece_op<O: ApiPieceOp>(form : Json<ApiPiece<O>>)
-> impl response::Responder<'static> {
""
}
+#[derive(Debug,Serialize,Deserialize)]
+struct ApiPieceGrab {
+}
#[post("/_/api/grab", format="json", data="<form>")]
#[throws(OE)]
fn api_grab(form : Json<ApiPiece<ApiPieceGrab>>)
-> impl response::Responder<'static> {
api_piece_op(form)
}
+impl ApiPieceOp for ApiPieceGrab {
+ #[throws(GameError)]
+ fn op(&self, gs: &mut GameState, player: PlayerId, piece: PieceId,
+ lens: &dyn Lens)
+ -> (PieceUpdateOp<()>, Vec<LogEntry>) {
+ let pl = gs.players.byid(player).unwrap();
+ let pc = gs.pieces.byid_mut(piece).unwrap();
+ if pc.held.is_some() { Err(GameError::PieceHeld)? }
+ pc.held = Some(player);
+
+ let update = PieceUpdateOp::Modify(());
+
+ let logent = LogEntry {
+ html : format!("{} grasped {}",
+ &htmlescape::encode_minimal(&pl.nick),
+ pc.describe_html(&lens.log_pri(piece, pc))),
+ };
+
+ (update, vec![logent])
+ }
+}
#[derive(Debug,Serialize,Deserialize)]
struct ApiUngrab {
t : String,