use std::any::*;
pub trait ToAny {
fn to_any(&mut self) -> Option<Box<dyn Any>>;
}
pub trait Downcast {
fn downcast<AnyT>(&mut self) -> Option<Box<AnyT>>
where
AnyT: Any;
}
impl<IntoAnyT> Downcast for IntoAnyT
where
IntoAnyT: ToAny + ?Sized,
{
fn downcast<AnyT>(&mut self) -> Option<Box<AnyT>>
where
AnyT: Any,
{
self.to_any().and_then(|any| any.downcast().ok())
}
}