chiark / gitweb /
Prep for flip
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 27 Sep 2020 21:56:19 +0000 (22:56 +0100)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 27 Sep 2020 21:57:00 +0000 (22:57 +0100)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/api.rs
src/error.rs
src/imports.rs
src/spec.rs
src/updates.rs

index 2078fb2ac7612817a6cd7b6bfad985443b87ad0f..13bf4c7d3f07ddaccbfb4e8366e8c1b7dc02caeb 100644 (file)
@@ -12,16 +12,17 @@ struct ApiPiece<O : ApiPieceOp> {
   cseq : ClientSequence,
   op : O,
 }
+
 trait ApiPieceOp : Debug {
   #[throws(ApiPieceOpError)]
   fn op(&self, gs: &mut GameState, player: PlayerId, piece: PieceId,
         p: &dyn Piece,
         lens: &dyn Lens /* used for LogEntry and PieceId but not Pos */)
-        -> (PieceUpdateOp<()>, Vec<LogEntry>);
+        -> PieceUpdateFromOp;
 }
 
 #[derive(Error,Debug)]
-enum ApiPieceOpError {
+pub enum ApiPieceOpError {
   ReportViaResponse(#[from] OnlineError),
   ReportViaUpdate(#[from] PieceOpError),
   PartiallyProcessed(PieceOpError, Vec<LogEntry>),
@@ -77,7 +78,7 @@ impl<'r> Responder<'r> for OnlineError {
         => Status::NotFound,
       OnlineError::PieceHeld | OnlineError::PieceGone
         => Status::Conflict,
-      InvalidZCoord | BadJSON(_)
+      InvalidZCoord | BadOperation | BadJSON(_)
         => Status::BadRequest,
     };
     let mut resp = Responder::respond_to(msg,req).unwrap();
index b45d88ae153be765ab101cffe403bca5fea974ad..1312d124482ff5076b4cdfc29cfdfb4a70cfd2c2 100644 (file)
@@ -22,6 +22,8 @@ pub enum OnlineError {
   PieceGone,
   #[error("improper piece hold status for op (maybe race)")]
   PieceHeld,
+  #[error("improper UI operation")]
+  BadOperation,
 }
 from_instance_lock_error!{OnlineError}
 
index ba24e764c6c13ce7c81a8d1e5efb3a04e5749f60..fa6d610b94365de0745fd4928aff70b8e3aa9ba2 100644 (file)
@@ -106,7 +106,7 @@ pub use crate::commands::*;
 pub use crate::slotmap_slot_idx::*;
 pub use crate::cmdlistener::*;
 pub use crate::mgmtchannel::*;
-pub use crate::api::{Lens,TransparentLens};
+pub use crate::api::{Lens,TransparentLens,ApiPieceOpError};
 pub use crate::utils::*;
 pub use crate::spec::*;
 pub use crate::debugreader::DebugReader;
index 64512b3975397603e0b469041f7ae7114df6c015..332c3cb33e17840dd62a9d416faa0280a38b3ac2 100644 (file)
@@ -27,9 +27,10 @@ pub type Pos = PosC<Coord>;
 #[serde(transparent)]
 pub struct RawToken (pub String);
 
+pub type RawFaceId = u8;
 define_index_type! {
   #[derive(Default)]
-  pub struct FaceId = u8;
+  pub struct FaceId = RawFaceId;
 }
 
 #[derive(Serialize,Deserialize)]
index e4e7800647fc46779a680ec40a9bb1456d57dc03..359d6bed78297996ad2bcc591e8255b43f12c806 100644 (file)
@@ -72,6 +72,9 @@ pub enum PieceUpdateOp<NS> {
   SetZLevel(ZLevel),
 }
 
+pub type PieceUpdateFromOp = (PieceUpdateOp<()>, Vec<LogEntry>);
+pub type PieceUpdateResult = Result<PieceUpdateFromOp, ApiPieceOpError>;
+
 // ---------- for traansmission ----------
 
 #[derive(Debug,Serialize)]