bevy_reflect

Trait ReflectRemote

Source
pub trait ReflectRemote: Reflect {
    type Remote;

    // Required methods
    fn as_remote(&self) -> &Self::Remote;
    fn as_remote_mut(&mut self) -> &mut Self::Remote;
    fn into_remote(self) -> Self::Remote;
    fn as_wrapper(remote: &Self::Remote) -> &Self;
    fn as_wrapper_mut(remote: &mut Self::Remote) -> &mut Self;
    fn into_wrapper(remote: Self::Remote) -> Self;
}
Expand description

Marks a type as a reflectable wrapper for a remote type.

This allows types from external libraries (remote types) to be included in reflection.

§Safety

It is highly recommended to avoid implementing this trait manually and instead use the #[reflect_remote] attribute macro. This is because the trait tends to rely on transmute, which is very unsafe.

The macro will ensure that the following safety requirements are met:

  • Self is a single-field tuple struct (i.e. a newtype) containing the remote type.
  • Self is #[repr(transparent)] over the remote type.

Additionally, the macro will automatically generate Reflect and FromReflect implementations, along with compile-time assertions to validate that the safety requirements have been met.

§Example

use bevy_reflect_derive::{reflect_remote, Reflect};

mod some_lib {
  pub struct TheirType {
    pub value: u32
  }
}

#[reflect_remote(some_lib::TheirType)]
struct MyType {
  pub value: u32
}

#[derive(Reflect)]
struct MyStruct {
  #[reflect(remote = MyType)]
  data: some_lib::TheirType,
}

Required Associated Types§

Source

type Remote

The remote type this type represents via reflection.

Required Methods§

Source

fn as_remote(&self) -> &Self::Remote

Converts a reference of this wrapper to a reference of its remote type.

Source

fn as_remote_mut(&mut self) -> &mut Self::Remote

Converts a mutable reference of this wrapper to a mutable reference of its remote type.

Source

fn into_remote(self) -> Self::Remote

Converts this wrapper into its remote type.

Source

fn as_wrapper(remote: &Self::Remote) -> &Self

Converts a reference of the remote type to a reference of this wrapper.

Source

fn as_wrapper_mut(remote: &mut Self::Remote) -> &mut Self

Converts a mutable reference of the remote type to a mutable reference of this wrapper.

Source

fn into_wrapper(remote: Self::Remote) -> Self

Converts the remote type into this wrapper.

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§