pub trait FromReflect: Reflect + Sized {
    // Required method
    fn from_reflect(reflect: &dyn Reflect) -> Option<Self>;

    // Provided method
    fn take_from_reflect(
        reflect: Box<dyn Reflect>
    ) -> Result<Self, Box<dyn Reflect>> { ... }
}
Expand description

A trait that enables types to be dynamically constructed from reflected data.

It’s recommended to use the derive macro rather than manually implementing this trait.

FromReflect allows dynamic proxy types, like DynamicStruct, to be used to generate their concrete counterparts. It can also be used to partially or fully clone a type (depending on whether it has ignored fields or not).

In some cases, this trait may even be required. Deriving Reflect on an enum requires all its fields to implement FromReflect. Additionally, some complex types like Vec<T> require that their element types implement this trait. The reason for such requirements is that some operations require new data to be constructed, such as swapping to a new variant or pushing data to a homogenous list.

See the crate-level documentation to see how this trait can be used.

Required Methods§

source

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

Constructs a concrete instance of Self from a reflected value.

Provided Methods§

source

fn take_from_reflect( reflect: Box<dyn Reflect> ) -> Result<Self, Box<dyn Reflect>>

Attempts to downcast the given value to Self using, constructing the value using from_reflect if that fails.

This method is more efficient than using from_reflect for cases where the given value is likely a boxed instance of Self (i.e. Box<Self>) rather than a boxed dynamic type (e.g. DynamicStruct, DynamicList, etc.).

Implementations on Foreign Types§

source§

impl FromReflect for bool

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<T: Hash + Eq + Clone + Send + Sync + 'static> FromReflect for HashSet<T>

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<A: FromReflect, B: FromReflect, C: FromReflect, D: FromReflect, E: FromReflect, F: FromReflect, G: FromReflect, H: FromReflect> FromReflect for (A, B, C, D, E, F, G, H)

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for i8

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for NonZeroI8

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for Duration

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<A: FromReflect, B: FromReflect> FromReflect for (A, B)

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for u32

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for NonZeroI32

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for u8

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for PathBuf

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<A: FromReflect> FromReflect for (A,)

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for NonZeroU8

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for char

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for Instant

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for isize

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for NonZeroUsize

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<K, V, S> FromReflect for HashMap<K, V, S>where K: FromReflect + Eq + Hash, V: FromReflect, S: BuildHasher + Default + Send + Sync + 'static,

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<T: Clone + Send + Sync + 'static> FromReflect for Range<T>

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<A: FromReflect, B: FromReflect, C: FromReflect, D: FromReflect, E: FromReflect, F: FromReflect, G: FromReflect, H: FromReflect, I: FromReflect, J: FromReflect, K: FromReflect> FromReflect for (A, B, C, D, E, F, G, H, I, J, K)

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for OsString

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for u64

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for String

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<T: Clone + Send + Sync + 'static> FromReflect for RangeInclusive<T>

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for NonZeroU128

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<T: FromReflect> FromReflect for VecDeque<T>

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<A: FromReflect, B: FromReflect, C: FromReflect> FromReflect for (A, B, C)

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for NonZeroU16

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for NonZeroI64

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for i16

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for ()

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for usize

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<T: FromReflect> FromReflect for Option<T>

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<A: FromReflect, B: FromReflect, C: FromReflect, D: FromReflect, E: FromReflect, F: FromReflect> FromReflect for (A, B, C, D, E, F)

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<A: FromReflect, B: FromReflect, C: FromReflect, D: FromReflect, E: FromReflect, F: FromReflect, G: FromReflect, H: FromReflect, I: FromReflect, J: FromReflect, K: FromReflect, L: FromReflect> FromReflect for (A, B, C, D, E, F, G, H, I, J, K, L)

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<A: FromReflect, B: FromReflect, C: FromReflect, D: FromReflect, E: FromReflect, F: FromReflect, G: FromReflect, H: FromReflect, I: FromReflect, J: FromReflect> FromReflect for (A, B, C, D, E, F, G, H, I, J)

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for Cow<'static, str>

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<A: FromReflect, B: FromReflect, C: FromReflect, D: FromReflect> FromReflect for (A, B, C, D)

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<A: FromReflect, B: FromReflect, C: FromReflect, D: FromReflect, E: FromReflect, F: FromReflect, G: FromReflect, H: FromReflect, I: FromReflect> FromReflect for (A, B, C, D, E, F, G, H, I)

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for RangeFull

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for u128

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<A: FromReflect, B: FromReflect, C: FromReflect, D: FromReflect, E: FromReflect, F: FromReflect, G: FromReflect> FromReflect for (A, B, C, D, E, F, G)

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for NonZeroU64

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<T: Clone + Send + Sync + 'static> FromReflect for RangeTo<T>

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for NonZeroU32

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for i128

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<T: FromReflect, const N: usize> FromReflect for [T; N]

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for NonZeroIsize

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for u16

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<T: FromReflect> FromReflect for Vec<T>

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for i32

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<T: Clone + Send + Sync + 'static> FromReflect for RangeFrom<T>

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for i64

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for NonZeroI128

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for &'static Path

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for f32

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<K, V, S> FromReflect for HashMap<K, V, S>where K: FromReflect + Eq + Hash, V: FromReflect, S: BuildHasher + Default + Send + Sync + 'static,

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<T: Clone + Send + Sync + 'static> FromReflect for RangeToInclusive<T>

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl<A: FromReflect, B: FromReflect, C: FromReflect, D: FromReflect, E: FromReflect> FromReflect for (A, B, C, D, E)

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for NonZeroI16

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

source§

impl FromReflect for f64

source§

fn from_reflect(reflect: &dyn Reflect) -> Option<Self>

Implementors§