From 9858f7cf7828df6b9f3e6cc3a8b8142d9cf96776 Mon Sep 17 00:00:00 2001 From: Ian Jackson Date: Sat, 13 Feb 2021 21:49:51 +0000 Subject: [PATCH] Provide xdata affordances Signed-off-by: Ian Jackson --- src/gamestate.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/gamestate.rs b/src/gamestate.rs index a50315e1..8316bcc3 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -82,9 +82,11 @@ pub struct PieceState { pub gen: Generation, pub lastclient: ClientId, pub gen_before_lastclient: Generation, - pub xdata: Option>, + pub xdata: PieceXDataState, } +pub type PieceXDataState = Option>; + #[derive(Debug,Serialize,Deserialize)] pub struct LogEntry { pub html: Html, @@ -273,9 +275,18 @@ impl PieceState { #[throws(IE)] pub fn xdata(&mut self) -> &mut T { - let m = format!("piece xdata unexpectedly {:?}", &self.xdata); - let xdata = self.xdata - .get_or_insert_with(|| ::default()); + self.xdata.get_mut()? + } +} + +pub trait PieceXDataExt { + fn get_mut(&mut self) -> Result<&mut T, IE>; +} +impl PieceXDataExt for PieceXDataState { + #[throws(IE)] + fn get_mut(&mut self) -> &mut T { + let m = format!("piece xdata unexpectedly {:?}", &self); + let xdata = self.get_or_insert_with(|| ::default()); Any::downcast_mut(xdata).ok_or_else(|| internal_logic_error(m))? } } -- 2.30.2