bevy_reflect_derive

Macro impl_reflect

Source
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
    }
);