From bd008589f31ea5b890aaef581d247cda6fd401fd Mon Sep 17 00:00:00 2001 From: Gino Valente Date: Tue, 2 Aug 2022 22:40:29 +0000 Subject: [PATCH] bevy_reflect: Update enum derives (#5473) > In draft until #4761 is merged. See the relevant commits [here](https://github.com/bevyengine/bevy/pull/5473/commits/a85fe94a183fdd62d512b2613376ce6eace8ab63). --- # Objective Update enums across Bevy to use the new enum reflection and get rid of `#[reflect_value(...)]` usages. ## Solution Find and replace all[^1] instances of `#[reflect_value(...)]` on enum types. --- ## Changelog - Updated all[^1] reflected enums to implement `Enum` (i.e. they are no longer `ReflectRef::Value`) ## Migration Guide Bevy-defined enums have been updated to implement `Enum` and are not considered value types (`ReflectRef::Value`) anymore. This means that their serialized representations will need to be updated. For example, given the Bevy enum: ```rust pub enum ScalingMode { None, WindowSize, Auto { min_width: f32, min_height: f32 }, FixedVertical(f32), FixedHorizontal(f32), } ``` You will need to update the serialized versions accordingly. ```js // OLD FORMAT { "type": "bevy_render::camera::projection::ScalingMode", "value": FixedHorizontal(720), }, // NEW FORMAT { "type": "bevy_render::camera::projection::ScalingMode", "enum": { "variant": "FixedHorizontal", "tuple": [ { "type": "f32", "value": 720, }, ], }, }, ``` This may also have other smaller implications (such as `Debug` representation), but serialization is probably the most prominent. [^1]: All enums except `HandleId` as neither `Uuid` nor `AssetPathId` implement the reflection traits --- crates/bevy_core_pipeline/src/clear_color.rs | 2 +- .../src/core_3d/camera_3d.rs | 2 +- crates/bevy_render/src/camera/camera.rs | 2 +- crates/bevy_render/src/camera/projection.rs | 4 ++-- crates/bevy_text/src/text.rs | 4 ++-- crates/bevy_ui/src/focus.rs | 4 ++-- crates/bevy_ui/src/ui_node.rs | 22 +++++++++---------- crates/bevy_ui/src/widget/image.rs | 2 +- 8 files changed, 21 insertions(+), 21 deletions(-) diff --git a/crates/bevy_core_pipeline/src/clear_color.rs b/crates/bevy_core_pipeline/src/clear_color.rs index 6160f2256f..5919746539 100644 --- a/crates/bevy_core_pipeline/src/clear_color.rs +++ b/crates/bevy_core_pipeline/src/clear_color.rs @@ -5,7 +5,7 @@ use bevy_render::{color::Color, extract_resource::ExtractResource}; use serde::{Deserialize, Serialize}; #[derive(Reflect, Serialize, Deserialize, Clone, Debug, Default)] -#[reflect_value(Serialize, Deserialize)] +#[reflect(Serialize, Deserialize)] pub enum ClearColorConfig { #[default] Default, diff --git a/crates/bevy_core_pipeline/src/core_3d/camera_3d.rs b/crates/bevy_core_pipeline/src/core_3d/camera_3d.rs index bca403cc03..ce91c2d2e0 100644 --- a/crates/bevy_core_pipeline/src/core_3d/camera_3d.rs +++ b/crates/bevy_core_pipeline/src/core_3d/camera_3d.rs @@ -23,7 +23,7 @@ pub struct Camera3d { /// The depth clear operation to perform for the main 3d pass. #[derive(Reflect, Serialize, Deserialize, Clone, Debug)] -#[reflect_value(Serialize, Deserialize)] +#[reflect(Serialize, Deserialize)] pub enum Camera3dDepthLoadOp { /// Clear with a specified value. /// Note that 0.0 is the far plane due to bevy's use of reverse-z projections. diff --git a/crates/bevy_render/src/camera/camera.rs b/crates/bevy_render/src/camera/camera.rs index f24e49e994..c2d01aca56 100644 --- a/crates/bevy_render/src/camera/camera.rs +++ b/crates/bevy_render/src/camera/camera.rs @@ -311,7 +311,7 @@ impl RenderTarget { } #[derive(Debug, Clone, Copy, Default, Reflect, FromReflect, Serialize, Deserialize)] -#[reflect_value(Serialize, Deserialize)] +#[reflect(Serialize, Deserialize)] pub enum DepthCalculation { /// Pythagorean distance; works everywhere, more expensive to compute. #[default] diff --git a/crates/bevy_render/src/camera/projection.rs b/crates/bevy_render/src/camera/projection.rs index a54f7fd5de..bf2a043b9e 100644 --- a/crates/bevy_render/src/camera/projection.rs +++ b/crates/bevy_render/src/camera/projection.rs @@ -142,14 +142,14 @@ impl Default for PerspectiveProjection { // TODO: make this a component instead of a property #[derive(Debug, Clone, Reflect, FromReflect, Serialize, Deserialize)] -#[reflect_value(Serialize, Deserialize)] +#[reflect(Serialize, Deserialize)] pub enum WindowOrigin { Center, BottomLeft, } #[derive(Debug, Clone, Reflect, FromReflect, Serialize, Deserialize)] -#[reflect_value(Serialize, Deserialize)] +#[reflect(Serialize, Deserialize)] pub enum ScalingMode { /// Manually specify left/right/top/bottom values. /// Ignore window resizing; the image will stretch. diff --git a/crates/bevy_text/src/text.rs b/crates/bevy_text/src/text.rs index b2440e1988..7a8dc176c6 100644 --- a/crates/bevy_text/src/text.rs +++ b/crates/bevy_text/src/text.rs @@ -187,7 +187,7 @@ impl Default for TextAlignment { /// Describes horizontal alignment preference for positioning & bounds. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Reflect, Serialize, Deserialize)] -#[reflect_value(Serialize, Deserialize)] +#[reflect(Serialize, Deserialize)] pub enum HorizontalAlign { /// Leftmost character is immediately to the right of the render position.
/// Bounds start from the render position and advance rightwards. @@ -213,7 +213,7 @@ impl From for glyph_brush_layout::HorizontalAlign { /// Describes vertical alignment preference for positioning & bounds. Currently a placeholder /// for future functionality. #[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Reflect, Serialize, Deserialize)] -#[reflect_value(Serialize, Deserialize)] +#[reflect(Serialize, Deserialize)] pub enum VerticalAlign { /// Characters/bounds start underneath the render position and progress downwards. Top, diff --git a/crates/bevy_ui/src/focus.rs b/crates/bevy_ui/src/focus.rs index b9ef20069e..f83054b2a8 100644 --- a/crates/bevy_ui/src/focus.rs +++ b/crates/bevy_ui/src/focus.rs @@ -33,7 +33,7 @@ use smallvec::SmallVec; #[derive( Component, Copy, Clone, Default, Eq, PartialEq, Debug, Reflect, Serialize, Deserialize, )] -#[reflect_value(Component, Serialize, Deserialize, PartialEq)] +#[reflect(Component, Serialize, Deserialize, PartialEq)] pub enum Interaction { /// The node has been clicked Clicked, @@ -48,7 +48,7 @@ pub enum Interaction { #[derive( Component, Copy, Clone, Default, Eq, PartialEq, Debug, Reflect, Serialize, Deserialize, )] -#[reflect_value(Component, Serialize, Deserialize, PartialEq)] +#[reflect(Component, Serialize, Deserialize, PartialEq)] pub enum FocusPolicy { /// Blocks interaction #[default] diff --git a/crates/bevy_ui/src/ui_node.rs b/crates/bevy_ui/src/ui_node.rs index 4483e03aa7..b603d6813b 100644 --- a/crates/bevy_ui/src/ui_node.rs +++ b/crates/bevy_ui/src/ui_node.rs @@ -21,7 +21,7 @@ pub struct Node { /// An enum that describes possible types of value in flexbox layout options #[derive(Copy, Clone, PartialEq, Debug, Default, Serialize, Deserialize, Reflect)] -#[reflect_value(PartialEq, Serialize, Deserialize)] +#[reflect(PartialEq, Serialize, Deserialize)] pub enum Val { /// No value defined #[default] @@ -208,7 +208,7 @@ impl Default for Style { /// How items are aligned according to the cross axis #[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)] -#[reflect_value(PartialEq, Serialize, Deserialize)] +#[reflect(PartialEq, Serialize, Deserialize)] pub enum AlignItems { /// Items are aligned at the start FlexStart, @@ -225,7 +225,7 @@ pub enum AlignItems { /// Works like [`AlignItems`] but applies only to a single item #[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)] -#[reflect_value(PartialEq, Serialize, Deserialize)] +#[reflect(PartialEq, Serialize, Deserialize)] pub enum AlignSelf { /// Use the value of [`AlignItems`] #[default] @@ -246,7 +246,7 @@ pub enum AlignSelf { /// /// It only applies if [`FlexWrap::Wrap`] is present and if there are multiple lines of items. #[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)] -#[reflect_value(PartialEq, Serialize, Deserialize)] +#[reflect(PartialEq, Serialize, Deserialize)] pub enum AlignContent { /// Each line moves towards the start of the cross axis FlexStart, @@ -269,7 +269,7 @@ pub enum AlignContent { /// /// For example English is written LTR (left-to-right) while Arabic is written RTL (right-to-left). #[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)] -#[reflect_value(PartialEq, Serialize, Deserialize)] +#[reflect(PartialEq, Serialize, Deserialize)] pub enum Direction { /// Inherit from parent node #[default] @@ -284,7 +284,7 @@ pub enum Direction { /// /// Part of the [`Style`] component. #[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)] -#[reflect_value(PartialEq, Serialize, Deserialize)] +#[reflect(PartialEq, Serialize, Deserialize)] pub enum Display { /// Use Flexbox layout model to determine the position of this [`Node`]. #[default] @@ -298,7 +298,7 @@ pub enum Display { /// Defines how flexbox items are ordered within a flexbox #[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)] -#[reflect_value(PartialEq, Serialize, Deserialize)] +#[reflect(PartialEq, Serialize, Deserialize)] pub enum FlexDirection { /// Same way as text direction along the main axis #[default] @@ -313,7 +313,7 @@ pub enum FlexDirection { /// Defines how items are aligned according to the main axis #[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)] -#[reflect_value(PartialEq, Serialize, Deserialize)] +#[reflect(PartialEq, Serialize, Deserialize)] pub enum JustifyContent { /// Pushed towards the start #[default] @@ -332,7 +332,7 @@ pub enum JustifyContent { /// Whether to show or hide overflowing items #[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Reflect, Serialize, Deserialize)] -#[reflect_value(PartialEq, Serialize, Deserialize)] +#[reflect(PartialEq, Serialize, Deserialize)] pub enum Overflow { /// Show overflowing items #[default] @@ -343,7 +343,7 @@ pub enum Overflow { /// The strategy used to position this node #[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)] -#[reflect_value(PartialEq, Serialize, Deserialize)] +#[reflect(PartialEq, Serialize, Deserialize)] pub enum PositionType { /// Relative to all other nodes with the [`PositionType::Relative`] value #[default] @@ -356,7 +356,7 @@ pub enum PositionType { /// Defines if flexbox items appear on a single line or on multiple lines #[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)] -#[reflect_value(PartialEq, Serialize, Deserialize)] +#[reflect(PartialEq, Serialize, Deserialize)] pub enum FlexWrap { /// Single line, will overflow if needed #[default] diff --git a/crates/bevy_ui/src/widget/image.rs b/crates/bevy_ui/src/widget/image.rs index f922378f60..7519d4966e 100644 --- a/crates/bevy_ui/src/widget/image.rs +++ b/crates/bevy_ui/src/widget/image.rs @@ -12,7 +12,7 @@ use serde::{Deserialize, Serialize}; /// Describes how to resize the Image node #[derive(Component, Debug, Default, Clone, Reflect, Serialize, Deserialize)] -#[reflect_value(Component, Serialize, Deserialize)] +#[reflect(Component, Serialize, Deserialize)] pub enum ImageMode { /// Keep the aspect ratio of the image #[default]