chiark / gitweb /
at: impl PieceSpecForOp for ()
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 14 Mar 2021 16:40:21 +0000 (16:40 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sun, 14 Mar 2021 16:40:21 +0000 (16:40 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
apitest/at-otter.rs

index bc6e31130c025e2837b5cc029262fec24a59d21f..f294680d8c32aa82e91a601b17bba8830d0243de 100644 (file)
@@ -247,7 +247,7 @@ impl Session {
 
   #[throws(AE)]
   fn api_piece_op_single<O:PieceOp>(&mut self, piece: &str, o: O) {
-    let (opname, payload) = o.api();
+    let (opname, payload) = if let Some(o) = o.api() { o } else { return };
 
     self.cseq += 1;
     let cseq = self.cseq;
@@ -406,16 +406,20 @@ pub fn update_update_pieces<PI:Idx>(
 
 pub type PieceOpData = (&'static str, JsV);
 pub trait PieceOp: Debug {
-  fn api(&self) -> PieceOpData;
+  fn api(&self) -> Option<PieceOpData>;
   fn update(&self, pi: &mut PieceInfo<JsV>) { info!("no update {:?}", self) }
 }
 impl PieceOp for PieceOpData {
-  fn api(&self) -> PieceOpData { (self.0, self.1.clone()) }
+  fn api(&self) -> Option<PieceOpData> { Some((self.0, self.1.clone())) }
 }
 impl PieceOp for Pos {
-  fn api(&self) -> PieceOpData { ("m", json![self.0]) }
+  fn api(&self) -> Option<PieceOpData> { Some(("m", json![self.0])) }
   fn update(&self, pi: &mut PieceInfo<JsV>) { pi.pos = *self }
 }
+impl PieceOp for () {
+  fn api(&self) -> Option<PieceOpData> { None }
+  fn update(&self, pi: &mut PieceInfo<JsV>) {  }
+}
 
 pub trait PieceSpecForOp: Debug {
   fn id(&self) -> &str;