impl_downcast!(PieceXData);
#[enum_dispatch]
+#[dyn_upcast]
pub trait OutlineTrait: Send + Debug {
fn outline_path(&self, scale: f64) -> Result<Html, IE>;
fn surround_path(&self) -> Result<Html, IE> {
#[typetag::serde(name="Hand")]
impl PieceXData for HandState { }
+#[dyn_upcast]
impl OutlineTrait for Hand {
delegate!{
to self.shape {
pub use anyhow;
pub use boolinator;
+pub use cast_trait_object;
pub use chrono;
pub use chrono_tz;
pub use delegate;
-x*0.5, -y*0.5, x, y, -x))
}
-impl<Desc, Outl> OutlineTrait for GenericSimpleShape<Desc, Outl>
+#[dyn_upcast]
+impl<Desc, Outl:'static> OutlineTrait for GenericSimpleShape<Desc, Outl>
where Desc: Debug + Send + Sync + 'static,
Outl: OutlineTrait,
{
fn itemname(&self) -> &str { self.itemname() }
}
-impl<Desc, Outl> GenericSimpleShape<Desc, Outl>
+impl<Desc, Outl:'static> GenericSimpleShape<Desc, Outl>
where Desc: Debug + Send + Sync + 'static,
Outl: OutlineTrait,
{
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};
}
}
+#[dyn_upcast]
impl OutlineTrait for Item { delegate! { to self.outline {
fn outline_path(&self, scale: f64) -> Result<Html, IE>;
fn thresh_dragraise(&self) -> Result<Option<Coord>, IE>;
#[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 {
#[derive(Clone,Copy,Debug,Serialize,Deserialize)]
pub struct Rectangle { pub xy: PosC<f64> }
+#[dyn_upcast]
impl OutlineTrait for Rectangle {
#[throws(IE)]
fn outline_path(&self, scale: f64) -> Html {
use super::*;
use crate::prelude::*;
use crate::shapelib::{Circle, Rectangle};
+ #[dyn_upcast(OutlineTrait)]
#[enum_dispatch(OutlineTrait)]
#[derive(Clone,Debug,Serialize,Deserialize)]
#[serde(tag="type")]