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>),
=> Status::NotFound,
OnlineError::PieceHeld | OnlineError::PieceGone
=> Status::Conflict,
- InvalidZCoord | BadJSON(_)
+ InvalidZCoord | BadOperation | BadJSON(_)
=> Status::BadRequest,
};
let mut resp = Responder::respond_to(msg,req).unwrap();
PieceGone,
#[error("improper piece hold status for op (maybe race)")]
PieceHeld,
+ #[error("improper UI operation")]
+ BadOperation,
}
from_instance_lock_error!{OnlineError}
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;
#[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)]
SetZLevel(ZLevel),
}
+pub type PieceUpdateFromOp = (PieceUpdateOp<()>, Vec<LogEntry>);
+pub type PieceUpdateResult = Result<PieceUpdateFromOp, ApiPieceOpError>;
+
// ---------- for traansmission ----------
#[derive(Debug,Serialize)]