spellcast 0.1.2

Casting of dynamic objects
Documentation
use crate::upcast::TryUpcastRef;

use super::*;

pub trait TryDyncastRef<To>: TryAsDyncastObj<Self, To>
where
    To: ?Sized
{
    fn try_dyncast_ref(self: &Self) -> Option<&To>;
    fn try_dyncast_mut(self: &mut Self) -> Option<&mut To>;
}
impl<From, To> TryDyncastRef<To> for From
where
    From: TryAsDyncastObj<From, To> + ?Sized,
    To: ?Sized
{
    fn try_dyncast_ref(self: &Self) -> Option<&To>
    {
        self.try_as_dyncast_obj().and_then(|dyn_vee| dyn_vee.try_upcast_ref())
    }
    fn try_dyncast_mut(self: &mut Self) -> Option<&mut To>
    {
        self.try_as_dyncast_obj_mut().and_then(|dyn_vee| dyn_vee.try_upcast_mut())
    }
}