Trait CastFrom

Source
pub unsafe trait CastFrom<T> {
    // Required methods
    fn cast(t: &T) -> &Self;
    fn cast_mut(t: &mut T) -> &mut Self;
}
Expand description

Helper trait for the MetaTable. This trait is required to be implemented for a trait to be compatible with the meta table.

§Memory safety

Not casting self but e.g. a field to the trait object can result in severe memory safety issues.

§Examples

use async_ecs::*;

trait Foo {
    fn foo1(&self);
    fn foo2(&mut self, x: i32) -> i32;
}

unsafe impl<T> CastFrom<T> for dyn Foo
where
    T: Foo + 'static,
{
    fn cast(t: &T) -> &(dyn Foo + 'static) {
        t
    }

    fn cast_mut(t: &mut T) -> &mut (dyn Foo + 'static) {
        t
    }
}

Required Methods§

Source

fn cast(t: &T) -> &Self

Casts an immutable T reference to a trait object.

Source

fn cast_mut(t: &mut T) -> &mut Self

Casts a mutable T reference to a trait object.

Dyn Compatibility§

This trait is not dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.

Implementors§

Source§

impl<T> CastFrom<T> for dyn AnyStorage
where T: AnyStorage + 'static,