From 429f843a65d64e2e07ca70505a0c5a6ef009c261 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 13 Feb 2021 22:07:17 +0000 Subject: [PATCH] provide immutable xdata affordances Signed-off-by: Ian Jackson --- src/gamestate.rs | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/gamestate.rs b/src/gamestate.rs index a82b18a8..d6acb687 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -275,15 +275,28 @@ impl PieceState { } #[throws(IE)] - pub fn xdata(&mut self) -> &mut T { + pub fn xdata(&self) -> Option<&T> { + self.xdata.get()? + } + + #[throws(IE)] + pub fn xdata_mut(&mut self) -> &mut T { self.xdata.get_mut()? } } pub trait PieceXDataExt { + fn get(&self) -> Result, IE>; fn get_mut(&mut self) -> Result<&mut T, IE>; } impl PieceXDataExt for PieceXDataState { + #[throws(IE)] + fn get(&self) -> Option<&T> { + let m = format!("piece xdata unexpectedly {:?}", &self); + let xdata = match &self { Some(xdata) => xdata, None => return None }; + Some(Any::downcast_ref(xdata).ok_or_else(|| internal_logic_error(m))?) + } + #[throws(IE)] fn get_mut(&mut self) -> &mut T { let m = format!("piece xdata unexpectedly {:?}", &self); -- 2.30.2