chiark / gitweb /
xdata: Provide get_mut_exp
authorIan Jackson <ijackson@chiark.greenend.org.uk>
Fri, 19 Mar 2021 00:38:24 +0000 (00:38 +0000)
committerIan Jackson <ijackson@chiark.greenend.org.uk>
Sat, 20 Mar 2021 20:12:41 +0000 (20:12 +0000)
Signed-off-by: Ian Jackson <ijackson@chiark.greenend.org.uk>
src/gamestate.rs

index 70e896f51ed57c72fda52851d90098b543d0f60d..e17d537654b29b78ed92517a2f8a59fd8a50d013 100644 (file)
@@ -305,6 +305,13 @@ impl GPiece {
     self.xdata.get_mut(def)?
   }
 
+  #[throws(IE)]
+  pub fn xdata_mut_exp<
+      T: PieceXData,
+  >(&mut self) -> &mut T {
+    self.xdata.get_mut_exp()?
+  }
+
   pub fn dummy() -> Self {
     let gen_dummy = Generation(1);
     GPiece {
@@ -362,6 +369,13 @@ impl PieceXDataState {
     let xdata = self.get_or_insert_with(|| Box::new(def()));
     xdata_get_mut_inner(xdata)
   }
+
+  fn get_mut_exp<
+      T: PieceXData,
+  >(&mut self) -> Result<&mut T, IE> {
+    let xdata = self.as_mut().ok_or_else(|| xdata_missing::<T>())?;
+    xdata_get_mut_inner(xdata)
+  }
 }
 
 fn xdata_get_mut_inner<