[][src]Crate upcast

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