chiark / gitweb /
wip raise
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 8 Jul 2020 01:24:45 +0000 (02:24 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Wed, 8 Jul 2020 01:24:50 +0000 (02:24 +0100)
src/bin/server.rs
src/global.rs

index d6d47d4cc58fd7131e6138bccdae6964f3ac931e..d63b7f5b9ddfadbe3a965335c189e841b5498a9e 100644 (file)
@@ -313,6 +313,27 @@ impl ApiPieceOp for ApiPieceUngrab {
   }
 }
 
+#[derive(Debug,Serialize,Deserialize)]
+struct ApiPieceRaise {
+}
+#[post("/_/api/raise", format="json", data="<form>")]
+#[throws(OE)]
+fn api_raise(form : Json<ApiPiece<ApiPieceRaise>>)
+            -> impl response::Responder<'static> {
+  api_piece_op(form)
+}
+impl ApiPieceOp for ApiPieceRaise {
+  #[throws(GameError)]
+  fn op(&self, gs: &mut GameState, _: PlayerId, piece: PieceId,
+        _: &dyn Lens)
+        -> (PieceUpdateOp<()>, Vec<LogEntry>) {
+    let pc = gs.pieces.byid_mut(piece).unwrap();
+    pc.raised = gs.gen;
+    let update = PieceUpdateOp::Raise;
+    (update, vec![])
+  }
+}
+
 #[derive(Debug,Serialize,Deserialize)]
 struct ApiPieceMove (Pos);
 #[post("/_/api/m", format="json", data="<form>")]
@@ -372,6 +393,7 @@ fn main() {
       updates,
       api_grab,
       api_ungrab,
+      api_raise,
       api_move,
     ])
     .launch();
index c46c31edd942590d15a1abdf3413fa2fec02618d..4e6aee4c515b7f6b2a592f7cdee99e305e31a667 100644 (file)
@@ -59,6 +59,7 @@ pub enum PieceUpdateOp<NS> {
   Insert(NS),
   Modify(NS),
   Move(Pos),
+  Raise,
 }
 impl<NS> PieceUpdateOp<NS> {
   pub fn new_state(&self) -> Option<&NS> {
@@ -68,6 +69,7 @@ impl<NS> PieceUpdateOp<NS> {
       Insert(ns) => Some(ns),
       Modify(ns) => Some(ns),
       Move(_) => None,
+      Raise => None,
     }
   }
   pub fn map_new_state<NS2,F: FnOnce(NS) -> NS2>(self, f:F)
@@ -78,6 +80,7 @@ impl<NS> PieceUpdateOp<NS> {
       Insert(ns) => Insert(f(ns)),
       Modify(ns) => Modify(f(ns)),
       Move(pos) => Move(pos),
+      Raise => Raise,
     }
   }
 }