From: Ian Jackson Date: Wed, 17 Mar 2021 01:41:20 +0000 (+0000) Subject: xdata: Replace use of Default with bespoke dummy() method X-Git-Tag: otter-0.5.0~698 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=958c53c0ab2aaf35ab9a6b7f4aa12acb27ca5ec1;p=otter.git xdata: Replace use of Default with bespoke dummy() method Signed-off-by: Ian Jackson --- diff --git a/src/gamestate.rs b/src/gamestate.rs index 426f6232..22ea1df5 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -92,11 +92,7 @@ pub struct CommittedLogEntry { #[typetag::serde(tag="type")] pub trait PieceXData: Downcast + Debug + Send + 'static { - fn default() -> Box where Self: Default { - let k = Box::new(::default()); - dbg!(&k); - k - } + fn dummy() -> Self where Self: Sized; } impl_downcast!(PieceXData); @@ -279,7 +275,7 @@ impl Debug for Html { impl GPiece { #[throws(IE)] - pub fn xdata(&self) -> Option<&T> { + pub fn xdata(&self) -> Option<&T> { self.xdata.get()? } @@ -309,20 +305,19 @@ impl GPiece { } } -fn xdata_unexpected(got: &dyn PieceXData) - -> InternalError { +fn xdata_unexpected(got: &dyn PieceXData) -> InternalError { internal_logic_error(format!( "\n\ piece xdata unexpectedly: {:?}\n\ expected something like: Some({:?})\n", - &got, ::default(), + &got, T::dummy(), )) } #[ext(pub)] impl PieceXDataState { #[throws(IE)] - fn get(&self) -> Option<&T> where T: Default { + fn get(&self) -> Option<&T> { let xdata = if let Some(xdata) = &self { xdata } else { return None }; let xdata: &dyn PieceXData = xdata.as_ref(); if let Some(y) = xdata.downcast_ref::() { Some(y) } @@ -330,7 +325,7 @@ impl PieceXDataState { } fn get_mut< - T: PieceXData+Default, + T: PieceXData, D: FnOnce() -> T, >(&mut self, def: D) -> Result<&mut T, IE> { let xdata = self.get_or_insert_with(|| Box::new(def())); diff --git a/src/hand.rs b/src/hand.rs index f0a506c2..c46f842b 100644 --- a/src/hand.rs +++ b/src/hand.rs @@ -33,7 +33,9 @@ impl HandState { } #[typetag::serde(name="Hand")] -impl PieceXData for HandState { } +impl PieceXData for HandState { + fn dummy() -> Self { default() } +} #[dyn_upcast] impl OutlineTrait for Hand {