From: Ian Jackson Date: Mon, 8 Mar 2021 23:31:38 +0000 (+0000) Subject: Use dyn_upcast for OutlineTrait (nfc) X-Git-Tag: otter-0.4.0~204 X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=commitdiff_plain;h=994db2c495e04736650357d5084fb60268459e35;p=otter.git Use dyn_upcast for OutlineTrait (nfc) Signed-off-by: Ian Jackson --- diff --git a/src/gamestate.rs b/src/gamestate.rs index ea6ca7e9..33294c1d 100644 --- a/src/gamestate.rs +++ b/src/gamestate.rs @@ -108,6 +108,7 @@ pub trait PieceXData: Downcast + Debug + Send + 'static { impl_downcast!(PieceXData); #[enum_dispatch] +#[dyn_upcast] pub trait OutlineTrait: Send + Debug { fn outline_path(&self, scale: f64) -> Result; fn surround_path(&self) -> Result { diff --git a/src/hand.rs b/src/hand.rs index 175d10d3..dc9699fc 100644 --- a/src/hand.rs +++ b/src/hand.rs @@ -35,6 +35,7 @@ impl HandState { #[typetag::serde(name="Hand")] impl PieceXData for HandState { } +#[dyn_upcast] impl OutlineTrait for Hand { delegate!{ to self.shape { diff --git a/src/imports.rs b/src/imports.rs index 797824db..af48fc21 100644 --- a/src/imports.rs +++ b/src/imports.rs @@ -7,6 +7,7 @@ pub use otter_base::imports::*; pub use anyhow; pub use boolinator; +pub use cast_trait_object; pub use chrono; pub use chrono_tz; pub use delegate; diff --git a/src/pieces.rs b/src/pieces.rs index 9b7a05be..6962b3f4 100644 --- a/src/pieces.rs +++ b/src/pieces.rs @@ -111,7 +111,8 @@ pub fn svg_rectangle_path(PosC([x,y]): PosC) -> Html { -x*0.5, -y*0.5, x, y, -x)) } -impl OutlineTrait for GenericSimpleShape +#[dyn_upcast] +impl OutlineTrait for GenericSimpleShape where Desc: Debug + Send + Sync + 'static, Outl: OutlineTrait, { @@ -145,7 +146,7 @@ impl PieceTrait for SimpleShape { fn itemname(&self) -> &str { self.itemname() } } -impl GenericSimpleShape +impl GenericSimpleShape where Desc: Debug + Send + Sync + 'static, Outl: OutlineTrait, { diff --git a/src/prelude.rs b/src/prelude.rs index 05636ebe..4b34c4ba 100644 --- a/src/prelude.rs +++ b/src/prelude.rs @@ -52,6 +52,7 @@ pub use std::time::{self, Duration, Instant}; pub use anyhow::{anyhow, ensure, Context}; pub use arrayvec::ArrayVec; pub use boolinator::Boolinator as _; +pub use cast_trait_object::{dyn_upcast, DynCastExt}; pub use delegate::delegate; pub use derive_more::*; pub use downcast_rs::{impl_downcast, Downcast}; diff --git a/src/shapelib.rs b/src/shapelib.rs index c1b4a8b5..60dee0ed 100644 --- a/src/shapelib.rs +++ b/src/shapelib.rs @@ -142,6 +142,7 @@ impl ItemEnquiryData { } } +#[dyn_upcast] impl OutlineTrait for Item { delegate! { to self.outline { fn outline_path(&self, scale: f64) -> Result; fn thresh_dragraise(&self) -> Result, IE>; @@ -490,6 +491,7 @@ pub fn load(libs: &Vec) { #[derive(Clone,Copy,Debug,Serialize,Deserialize)] pub struct Circle { pub diam: f64 } +#[dyn_upcast] impl OutlineTrait for Circle { #[throws(IE)] fn outline_path(&self, scale: f64) -> Html { @@ -532,6 +534,7 @@ impl CircleDefn { #[derive(Clone,Copy,Debug,Serialize,Deserialize)] pub struct Rectangle { pub xy: PosC } +#[dyn_upcast] impl OutlineTrait for Rectangle { #[throws(IE)] fn outline_path(&self, scale: f64) -> Html { diff --git a/src/spec.rs b/src/spec.rs index 06af4565..bb83d99b 100644 --- a/src/spec.rs +++ b/src/spec.rs @@ -199,6 +199,7 @@ mod outline { use super::*; use crate::prelude::*; use crate::shapelib::{Circle, Rectangle}; + #[dyn_upcast(OutlineTrait)] #[enum_dispatch(OutlineTrait)] #[derive(Clone,Debug,Serialize,Deserialize)] #[serde(tag="type")]