1 unstable release
0.1.0 | Aug 9, 2019 |
---|
#13 in #along
4KB
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()
}