#[cfg(test)]
use mockiato::mockable;
use std::any::Any;
#[cfg_attr(test, mockable(static_references))]
trait ObjectBehavior: ObjectBehaviorAsAny {
fn step(&mut self);
}
trait ObjectBehaviorAsAny {
fn as_any(&self) -> &'_ dyn Any;
}
impl<T> ObjectBehaviorAsAny for T
where
T: ObjectBehavior + 'static,
{
fn as_any(&self) -> &'_ dyn Any {
self
}
}
#[test]
fn object_behavior_can_be_downcast() {
let behavior: Box<dyn ObjectBehavior> = Box::new(ObjectBehaviorMock::new());
let concrete_behavior: &ObjectBehaviorMock = behavior.as_any().downcast_ref().unwrap();
dbg!(&concrete_behavior);
}