chiark / gitweb /
occult ilks: Change type of IPiece, no functional change yet
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 11 Mar 2021 10:34:46 +0000 (10:34 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Thu, 11 Mar 2021 10:34:46 +0000 (10:34 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
daemon/cmdlistener.rs
src/global.rs

index e7dac3dd0860d83e99ac319019ac9af859261b20..cf1a88d953b4734cf99c76d49d36edd7bae124aa 100644 (file)
@@ -559,7 +559,7 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>(
 
     MGI::DeletePiece(piece) => {
       let (ig, modperm, _) = cs.check_acl_modify_pieces(ag, ig)?;
-      let p = ig.ipieces.as_mut(modperm)
+      let IPiece { p } = ig.ipieces.as_mut(modperm)
         .remove(piece).ok_or(ME::PieceNotFound)?;
       let gs = &mut ig.gs;
       let gpc = gs.pieces.as_mut(modperm).remove(piece);
@@ -627,7 +627,7 @@ fn execute_game_insn<'cs, 'igr, 'ig: 'igr>(
         pc.pos.clamped(gs.table_size).map_err(|_| SpecError::PosOffTable)?;
         if pc.zlevel.z > gs.max_z { gs.max_z = pc.zlevel.z.clone() }
         let piece = gs.pieces.as_mut(modperm).insert(pc);
-        ig.ipieces.as_mut(modperm).insert(piece, p);
+        ig.ipieces.as_mut(modperm).insert(piece, IPiece { p });
         updates.push((piece, PieceUpdateOp::Insert(())));
         pos = (pos + posd)?;
       }
index 764f72a2400684c926d1128e1658cb944eda1de8..b2fe85d9eb0639b596053cd54154c166abba3933 100644 (file)
@@ -68,10 +68,16 @@ pub struct IPlayer { // usual variable: ipl
   pub tz: Timezone,
 }
 
+#[derive(Debug,Serialize,Deserialize)]
+pub struct IPiece {
+  #[serde(flatten)]
+  pub p: Box<dyn PieceTrait>,
+}
+
 #[derive(Debug,Serialize,Deserialize)]
 #[serde(transparent)]
 pub struct IPieces(ActualIPieces);
-pub type ActualIPieces = SecondarySlotMap<PieceId, Box<dyn PieceTrait>>;
+pub type ActualIPieces = SecondarySlotMap<PieceId, IPiece>;
 #[derive(Copy,Clone,Debug)]
 pub struct ModifyingPieces(());
 
@@ -1253,6 +1259,10 @@ pub fn process_all_players_for_account<
 
 impl IPieces {
   pub fn get(&self, piece: PieceId) -> Option<&Box<dyn PieceTrait>> {
+    Some(&self.0.get(piece)?.p)
+  }
+
+  pub fn get_ipc(&self, piece: PieceId) -> Option<&IPiece> {
     self.0.get(piece)
   }