Crate upcast

Source
Expand description

Simple trait for helping along upcasting of dyn supertraits.

pub trait A {}
pub trait B: A + Upcast<dyn A> {}
 
// Put this in your library
impl<'a, T: A + 'a> UpcastFrom<T> for dyn A + 'a {
    fn up_from(value: &T) -> &(dyn A + 'a) { value }
    fn up_from_mut(value: &mut T) -> &mut (dyn A + 'a) { value }
}

// Now your users can do an upcast if needed, or you can within implementations
fn do_cast(b: &dyn B) -> &dyn A {
    b.up()
}

Traitsยง

Upcast
Use this trait to perform your upcasts on dyn traits. Make sure to require it in the supertrait!
UpcastFrom
Implement this trait for your dyn Trait types for all T: Trait