chiark / gitweb /
code motion
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 6 Jul 2020 17:12:00 +0000 (18:12 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Mon, 6 Jul 2020 17:12:00 +0000 (18:12 +0100)
src/bin/server.rs

index 53494a2e717468772aee0ce73eca7007d9cec76d..be3d98ca4907e8970621adf77bd8f9f8e7d9bb97 100644 (file)
@@ -122,9 +122,6 @@ struct ApiPiece<O : ApiPieceOp> {
   #[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,
@@ -159,29 +156,6 @@ impl Lens for TransparentLens {
   }
 }
 
-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> {
@@ -261,13 +235,37 @@ fn api_piece_op<O: ApiPieceOp>(form : Json<ApiPiece<O>>)
   ""
 }
 
+#[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,