use crate::*; pub trait Exit: Send { fn exited (&self) -> bool; fn exit (&mut self); fn boxed (self) -> Box where Self: Sized + 'static { Box::new(self) } } #[macro_export] macro_rules! exit { ($T:ty) => { impl Exit for $T { fn exited (&self) -> bool { self.exited } fn exit (&mut self) { self.exited = true } } } } /// Marker trait for [Component]s that can [Exit] pub trait ExitableComponent: Exit + Component where E: Engine { /// Perform type erasure for collecting heterogeneous components. fn boxed (self) -> Box> where Self: Sized + 'static { Box::new(self) } } impl + Exit> ExitableComponent for C {}