impl_reflect!() { /* proc-macro */ }
Expand description
A replacement for #[derive(Reflect)]
to be used with foreign types which
the definitions of cannot be altered.
This macro is an alternative to impl_reflect_opaque!
and impl_from_reflect_opaque!
which implement foreign types as Opaque types. Note that there is no impl_from_reflect
,
as this macro will do the job of both. This macro implements them using one of the reflect
variant traits (bevy_reflect::{Struct, TupleStruct, Enum}
, etc.),
which have greater functionality. The type being reflected must be in scope, as you cannot
qualify it in the macro as e.g. bevy::prelude::Vec3
.
It is necessary to add a #[type_path = "my_crate::foo"]
attribute to all types.
It may be necessary to add #[reflect(Default)]
for some types, specifically non-constructible
foreign types. Without Default
reflected for such types, you will usually get an arcane
error message and fail to compile. If the type does not implement Default
, it may not
be possible to reflect without extending the macro.
§Example
Implementing Reflect
for bevy::prelude::Vec3
as a struct type:
use bevy::prelude::Vec3;
impl_reflect!(
#[reflect(PartialEq, Serialize, Deserialize, Default)]
#[type_path = "bevy::prelude"]
struct Vec3 {
x: f32,
y: f32,
z: f32
}
);