pub trait FromReflect: Sized + Reflect {
    // Required method
    fn from_reflect(reflect: &(dyn Reflect + 'static)) -> 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 homogeneous list.

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

Required Methods§

source

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> 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.).

Object Safety§

This trait is not object safe.

Implementations on Foreign Types§

source§

impl FromReflect for &'static str

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<&'static str>

source§

impl FromReflect for &'static Path

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<&'static Path>

source§

impl FromReflect for bool
where bool: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<bool>

source§

impl FromReflect for char
where char: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<char>

source§

impl FromReflect for f32
where f32: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<f32>

source§

impl FromReflect for f64
where f64: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<f64>

source§

impl FromReflect for i8
where i8: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<i8>

source§

impl FromReflect for i16
where i16: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<i16>

source§

impl FromReflect for i32
where i32: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<i32>

source§

impl FromReflect for i64
where i64: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<i64>

source§

impl FromReflect for i128
where i128: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<i128>

source§

impl FromReflect for isize
where isize: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<isize>

source§

impl FromReflect for u8
where u8: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<u8>

source§

impl FromReflect for u16
where u16: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<u16>

source§

impl FromReflect for u32
where u32: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<u32>

source§

impl FromReflect for u64
where u64: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<u64>

source§

impl FromReflect for u128
where u128: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<u128>

source§

impl FromReflect for ()

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<()>

source§

impl FromReflect for usize
where usize: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<usize>

source§

impl FromReflect for NonZero<i8>
where NonZero<i8>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<NonZero<i8>>

source§

impl FromReflect for NonZero<i16>
where NonZero<i16>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<NonZero<i16>>

source§

impl FromReflect for NonZero<i32>
where NonZero<i32>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<NonZero<i32>>

source§

impl FromReflect for NonZero<i64>
where NonZero<i64>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<NonZero<i64>>

source§

impl FromReflect for NonZero<i128>
where NonZero<i128>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<NonZero<i128>>

source§

impl FromReflect for NonZero<isize>
where NonZero<isize>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<NonZero<isize>>

source§

impl FromReflect for NonZero<u8>
where NonZero<u8>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<NonZero<u8>>

source§

impl FromReflect for NonZero<u16>
where NonZero<u16>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<NonZero<u16>>

source§

impl FromReflect for NonZero<u32>
where NonZero<u32>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<NonZero<u32>>

source§

impl FromReflect for NonZero<u64>
where NonZero<u64>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<NonZero<u64>>

source§

impl FromReflect for NonZero<u128>
where NonZero<u128>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<NonZero<u128>>

source§

impl FromReflect for NonZero<usize>
where NonZero<usize>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<NonZero<usize>>

source§

impl FromReflect for RangeFull
where RangeFull: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<RangeFull>

source§

impl FromReflect for OsString
where OsString: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<OsString>

source§

impl FromReflect for PathBuf
where PathBuf: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<PathBuf>

source§

impl FromReflect for SmolStr
where SmolStr: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<SmolStr>

source§

impl<A> FromReflect for (A,)
where A: FromReflect + TypePath,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<(A,)>

source§

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

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<(A, B)>

source§

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

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<(A, B, C)>

source§

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

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<(A, B, C, D)>

source§

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

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<(A, B, C, D, E)>

source§

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

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<(A, B, C, D, E, F)>

source§

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

source§

fn from_reflect( reflect: &(dyn Reflect + 'static) ) -> Option<(A, B, C, D, E, F, G)>

source§

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

source§

fn from_reflect( reflect: &(dyn Reflect + 'static) ) -> Option<(A, B, C, D, E, F, G, H)>

source§

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

source§

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

source§

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

source§

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

source§

impl<K, V, S> FromReflect for HashMap<K, V, S>

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<HashMap<K, V, S>>

source§

impl<T> FromReflect for Option<T>
where T: FromReflect + TypePath,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<Option<T>>

source§

impl<T> FromReflect for Saturating<T>
where T: Clone + Send + Sync + TypePath, Saturating<T>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<Saturating<T>>

source§

impl<T> FromReflect for Wrapping<T>
where T: Clone + Send + Sync + TypePath, Wrapping<T>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<Wrapping<T>>

source§

impl<T> FromReflect for Range<T>
where T: Clone + Send + Sync + TypePath, Range<T>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<Range<T>>

source§

impl<T> FromReflect for RangeFrom<T>
where T: Clone + Send + Sync + TypePath, RangeFrom<T>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<RangeFrom<T>>

source§

impl<T> FromReflect for RangeInclusive<T>
where T: Clone + Send + Sync + TypePath, RangeInclusive<T>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<RangeInclusive<T>>

source§

impl<T> FromReflect for RangeTo<T>
where T: Clone + Send + Sync + TypePath, RangeTo<T>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<RangeTo<T>>

source§

impl<T> FromReflect for RangeToInclusive<T>
where T: Clone + Send + Sync + TypePath, RangeToInclusive<T>: Any + Send + Sync,

source§

fn from_reflect( reflect: &(dyn Reflect + 'static) ) -> Option<RangeToInclusive<T>>

source§

impl<T, E> FromReflect for Result<T, E>
where T: Clone + Reflect + TypePath, E: Clone + Reflect + TypePath, Result<T, E>: Any + Send + Sync,

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<Result<T, E>>

source§

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

source§

fn from_reflect(reflect: &(dyn Reflect + 'static)) -> Option<[T; N]>

Implementors§

source§

impl FromReflect for ButtonState
where ButtonState: Any + Send + Sync,

source§

impl FromReflect for GamepadConnection

source§

impl FromReflect for GamepadEvent

source§

impl FromReflect for Key

source§

impl FromReflect for NativeKey

source§

impl FromReflect for NativeKeyCode

source§

impl FromReflect for MouseScrollUnit

source§

impl FromReflect for GamepadAxisType

source§

impl FromReflect for GamepadButtonType

source§

impl FromReflect for KeyCode

source§

impl FromReflect for MouseButton

source§

impl FromReflect for ForceTouch

source§

impl FromReflect for TouchPhase
where TouchPhase: Any + Send + Sync,

source§

impl FromReflect for EulerRot
where EulerRot: Any + Send + Sync,

source§

impl FromReflect for TimerMode
where TimerMode: Any + Send + Sync,

source§

impl FromReflect for Cow<'static, str>

source§

impl FromReflect for Cow<'static, Path>

source§

impl FromReflect for ApplicationLifetime

source§

impl FromReflect for CompositeAlphaMode

source§

impl FromReflect for CursorGrabMode

source§

impl FromReflect for CursorIcon
where CursorIcon: Any + Send + Sync,

source§

impl FromReflect for FileDragAndDrop

source§

impl FromReflect for Ime

source§

impl FromReflect for MonitorSelection

source§

impl FromReflect for PresentMode
where PresentMode: Any + Send + Sync,

source§

impl FromReflect for WindowLevel
where WindowLevel: Any + Send + Sync,

source§

impl FromReflect for WindowMode
where WindowMode: Any + Send + Sync,

source§

impl FromReflect for WindowPosition

source§

impl FromReflect for WindowRef

source§

impl FromReflect for WindowTheme
where WindowTheme: Any + Send + Sync,

source§

impl FromReflect for Name

source§

impl FromReflect for ComponentId

source§

impl FromReflect for ComponentTicks

source§

impl FromReflect for Tick

source§

impl FromReflect for EntityHash
where EntityHash: Any + Send + Sync,

source§

impl FromReflect for Entity
where Entity: Any + Send + Sync,

source§

impl FromReflect for Children

source§

impl FromReflect for Parent

source§

impl FromReflect for AxisSettings

source§

impl FromReflect for ButtonAxisSettings

source§

impl FromReflect for ButtonSettings

source§

impl FromReflect for GamepadAxisChangedEvent

source§

impl FromReflect for GamepadButtonChangedEvent

source§

impl FromReflect for GamepadButtonInput

source§

impl FromReflect for GamepadConnectionEvent

source§

impl FromReflect for GamepadInfo

source§

impl FromReflect for GamepadSettings

source§

impl FromReflect for KeyboardInput

source§

impl FromReflect for MouseButtonInput

source§

impl FromReflect for MouseMotion

source§

impl FromReflect for MouseWheel

source§

impl FromReflect for Gamepad

source§

impl FromReflect for GamepadAxis

source§

impl FromReflect for GamepadButton

source§

impl FromReflect for TouchInput

source§

impl FromReflect for TouchpadMagnify

source§

impl FromReflect for TouchpadRotate

source§

impl FromReflect for BVec2

source§

impl FromReflect for BVec3

source§

impl FromReflect for BVec4

source§

impl FromReflect for Mat2

source§

impl FromReflect for Mat3

source§

impl FromReflect for Mat4

source§

impl FromReflect for Quat

source§

impl FromReflect for Vec2

source§

impl FromReflect for Vec3

source§

impl FromReflect for Vec4

source§

impl FromReflect for IVec2

source§

impl FromReflect for IVec3

source§

impl FromReflect for IVec4

source§

impl FromReflect for Capsule2d

source§

impl FromReflect for Capsule3d

source§

impl FromReflect for Circle

source§

impl FromReflect for Cone

source§

impl FromReflect for ConicalFrustum

source§

impl FromReflect for Cuboid

source§

impl FromReflect for Cylinder

source§

impl FromReflect for Direction2d
where Direction2d: Any + Send + Sync,

source§

impl FromReflect for Direction3d
where Direction3d: Any + Send + Sync,

source§

impl FromReflect for Ellipse

source§

impl FromReflect for Line2d

source§

impl FromReflect for Line3d

source§

impl FromReflect for Plane2d

source§

impl FromReflect for Plane3d

source§

impl FromReflect for Rectangle

source§

impl FromReflect for RegularPolygon

source§

impl FromReflect for Segment2d

source§

impl FromReflect for Segment3d

source§

impl FromReflect for Sphere

source§

impl FromReflect for Torus

source§

impl FromReflect for Triangle2d

source§

impl FromReflect for Affine2

source§

impl FromReflect for Affine3A

source§

impl FromReflect for BVec3A
where BVec3A: Any + Send + Sync,

source§

impl FromReflect for BVec4A
where BVec4A: Any + Send + Sync,

source§

impl FromReflect for DAffine2

source§

impl FromReflect for DAffine3

source§

impl FromReflect for DMat2

source§

impl FromReflect for DMat3

source§

impl FromReflect for DMat4

source§

impl FromReflect for DQuat

source§

impl FromReflect for DVec2

source§

impl FromReflect for DVec3

source§

impl FromReflect for DVec4

source§

impl FromReflect for I64Vec2

source§

impl FromReflect for I64Vec3

source§

impl FromReflect for I64Vec4

source§

impl FromReflect for IRect

source§

impl FromReflect for Mat3A

source§

impl FromReflect for Rect

source§

impl FromReflect for U64Vec2

source§

impl FromReflect for U64Vec3

source§

impl FromReflect for U64Vec4

source§

impl FromReflect for URect

source§

impl FromReflect for Vec3A

source§

impl FromReflect for UVec2

source§

impl FromReflect for UVec3

source§

impl FromReflect for UVec4

source§

impl FromReflect for Fixed

source§

impl FromReflect for Real

source§

impl FromReflect for Stopwatch

source§

impl FromReflect for Timer

source§

impl FromReflect for Virtual

source§

impl FromReflect for GlobalTransform

source§

impl FromReflect for Transform

source§

impl FromReflect for String
where String: Any + Send + Sync,

source§

impl FromReflect for Duration
where Duration: Any + Send + Sync,

source§

impl FromReflect for Instant
where Instant: Any + Send + Sync,

source§

impl FromReflect for Uuid
where Uuid: Any + Send + Sync,

source§

impl FromReflect for Cursor

source§

impl FromReflect for CursorEntered

source§

impl FromReflect for CursorLeft

source§

impl FromReflect for CursorMoved

source§

impl FromReflect for EnabledButtons

source§

impl FromReflect for InternalWindowState

source§

impl FromReflect for NormalizedWindowRef

source§

impl FromReflect for PrimaryWindow

source§

impl FromReflect for ReceivedCharacter

source§

impl FromReflect for RequestRedraw

source§

impl FromReflect for Window

source§

impl FromReflect for WindowBackendScaleFactorChanged

source§

impl FromReflect for WindowCloseRequested

source§

impl FromReflect for WindowClosed

source§

impl FromReflect for WindowCreated

source§

impl FromReflect for WindowDestroyed

source§

impl FromReflect for WindowFocused

source§

impl FromReflect for WindowMoved

source§

impl FromReflect for WindowOccluded

source§

impl FromReflect for WindowResizeConstraints

source§

impl FromReflect for WindowResized

source§

impl FromReflect for WindowResolution

source§

impl FromReflect for WindowScaleFactorChanged

source§

impl FromReflect for WindowThemeChanged

source§

impl<K, V, S> FromReflect for bevy_internal::utils::hashbrown::HashMap<K, V, S>

source§

impl<S> FromReflect for NextState<S>

source§

impl<S> FromReflect for State<S>
where S: States + TypePath + FromReflect, State<S>: Any + Send + Sync,

source§

impl<T> FromReflect for Cow<'static, [T]>
where T: FromReflect + Clone + TypePath,

source§

impl<T> FromReflect for ButtonInput<T>
where T: Copy + Eq + Hash + Send + Sync + 'static + TypePath, ButtonInput<T>: Any + Send + Sync, HashSet<T>: FromReflect + TypePath,

source§

impl<T> FromReflect for Time<T>

source§

impl<T> FromReflect for HashSet<T>
where T: Hash + Eq + Clone + Send + Sync + TypePath, HashSet<T>: Any + Send + Sync,

source§

impl<T> FromReflect for VecDeque<T>
where T: FromReflect + TypePath,

source§

impl<T> FromReflect for Arc<T>
where T: Send + Sync + TypePath, Arc<T>: Any + Send + Sync,

source§

impl<T> FromReflect for Vec<T>
where T: FromReflect + TypePath,

source§

impl<T> FromReflect for SmallVec<T>
where T: Array + TypePath + Send + Sync, <T as Array>::Item: FromReflect + TypePath,

source§

impl<const N: usize> FromReflect for Polygon<N>
where Polygon<N>: Any + Send + Sync, [Vec2; N]: FromReflect + TypePath,

source§

impl<const N: usize> FromReflect for Polyline2d<N>

source§

impl<const N: usize> FromReflect for Polyline3d<N>