Skip to content

Commit bd00858

Browse files
committed
bevy_reflect: Update enum derives (#5473)
> In draft until #4761 is merged. See the relevant commits [here](a85fe94). --- # 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
1 parent 15826d6 commit bd00858

File tree

8 files changed

+21
-21
lines changed

8 files changed

+21
-21
lines changed

crates/bevy_core_pipeline/src/clear_color.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ use bevy_render::{color::Color, extract_resource::ExtractResource};
55
use serde::{Deserialize, Serialize};
66

77
#[derive(Reflect, Serialize, Deserialize, Clone, Debug, Default)]
8-
#[reflect_value(Serialize, Deserialize)]
8+
#[reflect(Serialize, Deserialize)]
99
pub enum ClearColorConfig {
1010
#[default]
1111
Default,

crates/bevy_core_pipeline/src/core_3d/camera_3d.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ pub struct Camera3d {
2323

2424
/// The depth clear operation to perform for the main 3d pass.
2525
#[derive(Reflect, Serialize, Deserialize, Clone, Debug)]
26-
#[reflect_value(Serialize, Deserialize)]
26+
#[reflect(Serialize, Deserialize)]
2727
pub enum Camera3dDepthLoadOp {
2828
/// Clear with a specified value.
2929
/// Note that 0.0 is the far plane due to bevy's use of reverse-z projections.

crates/bevy_render/src/camera/camera.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -311,7 +311,7 @@ impl RenderTarget {
311311
}
312312

313313
#[derive(Debug, Clone, Copy, Default, Reflect, FromReflect, Serialize, Deserialize)]
314-
#[reflect_value(Serialize, Deserialize)]
314+
#[reflect(Serialize, Deserialize)]
315315
pub enum DepthCalculation {
316316
/// Pythagorean distance; works everywhere, more expensive to compute.
317317
#[default]

crates/bevy_render/src/camera/projection.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -142,14 +142,14 @@ impl Default for PerspectiveProjection {
142142

143143
// TODO: make this a component instead of a property
144144
#[derive(Debug, Clone, Reflect, FromReflect, Serialize, Deserialize)]
145-
#[reflect_value(Serialize, Deserialize)]
145+
#[reflect(Serialize, Deserialize)]
146146
pub enum WindowOrigin {
147147
Center,
148148
BottomLeft,
149149
}
150150

151151
#[derive(Debug, Clone, Reflect, FromReflect, Serialize, Deserialize)]
152-
#[reflect_value(Serialize, Deserialize)]
152+
#[reflect(Serialize, Deserialize)]
153153
pub enum ScalingMode {
154154
/// Manually specify left/right/top/bottom values.
155155
/// Ignore window resizing; the image will stretch.

crates/bevy_text/src/text.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -187,7 +187,7 @@ impl Default for TextAlignment {
187187

188188
/// Describes horizontal alignment preference for positioning & bounds.
189189
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Reflect, Serialize, Deserialize)]
190-
#[reflect_value(Serialize, Deserialize)]
190+
#[reflect(Serialize, Deserialize)]
191191
pub enum HorizontalAlign {
192192
/// Leftmost character is immediately to the right of the render position.<br/>
193193
/// Bounds start from the render position and advance rightwards.
@@ -213,7 +213,7 @@ impl From<HorizontalAlign> for glyph_brush_layout::HorizontalAlign {
213213
/// Describes vertical alignment preference for positioning & bounds. Currently a placeholder
214214
/// for future functionality.
215215
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Reflect, Serialize, Deserialize)]
216-
#[reflect_value(Serialize, Deserialize)]
216+
#[reflect(Serialize, Deserialize)]
217217
pub enum VerticalAlign {
218218
/// Characters/bounds start underneath the render position and progress downwards.
219219
Top,

crates/bevy_ui/src/focus.rs

+2-2
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ use smallvec::SmallVec;
3333
#[derive(
3434
Component, Copy, Clone, Default, Eq, PartialEq, Debug, Reflect, Serialize, Deserialize,
3535
)]
36-
#[reflect_value(Component, Serialize, Deserialize, PartialEq)]
36+
#[reflect(Component, Serialize, Deserialize, PartialEq)]
3737
pub enum Interaction {
3838
/// The node has been clicked
3939
Clicked,
@@ -48,7 +48,7 @@ pub enum Interaction {
4848
#[derive(
4949
Component, Copy, Clone, Default, Eq, PartialEq, Debug, Reflect, Serialize, Deserialize,
5050
)]
51-
#[reflect_value(Component, Serialize, Deserialize, PartialEq)]
51+
#[reflect(Component, Serialize, Deserialize, PartialEq)]
5252
pub enum FocusPolicy {
5353
/// Blocks interaction
5454
#[default]

crates/bevy_ui/src/ui_node.rs

+11-11
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ pub struct Node {
2121

2222
/// An enum that describes possible types of value in flexbox layout options
2323
#[derive(Copy, Clone, PartialEq, Debug, Default, Serialize, Deserialize, Reflect)]
24-
#[reflect_value(PartialEq, Serialize, Deserialize)]
24+
#[reflect(PartialEq, Serialize, Deserialize)]
2525
pub enum Val {
2626
/// No value defined
2727
#[default]
@@ -208,7 +208,7 @@ impl Default for Style {
208208

209209
/// How items are aligned according to the cross axis
210210
#[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)]
211-
#[reflect_value(PartialEq, Serialize, Deserialize)]
211+
#[reflect(PartialEq, Serialize, Deserialize)]
212212
pub enum AlignItems {
213213
/// Items are aligned at the start
214214
FlexStart,
@@ -225,7 +225,7 @@ pub enum AlignItems {
225225

226226
/// Works like [`AlignItems`] but applies only to a single item
227227
#[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)]
228-
#[reflect_value(PartialEq, Serialize, Deserialize)]
228+
#[reflect(PartialEq, Serialize, Deserialize)]
229229
pub enum AlignSelf {
230230
/// Use the value of [`AlignItems`]
231231
#[default]
@@ -246,7 +246,7 @@ pub enum AlignSelf {
246246
///
247247
/// It only applies if [`FlexWrap::Wrap`] is present and if there are multiple lines of items.
248248
#[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)]
249-
#[reflect_value(PartialEq, Serialize, Deserialize)]
249+
#[reflect(PartialEq, Serialize, Deserialize)]
250250
pub enum AlignContent {
251251
/// Each line moves towards the start of the cross axis
252252
FlexStart,
@@ -269,7 +269,7 @@ pub enum AlignContent {
269269
///
270270
/// For example English is written LTR (left-to-right) while Arabic is written RTL (right-to-left).
271271
#[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)]
272-
#[reflect_value(PartialEq, Serialize, Deserialize)]
272+
#[reflect(PartialEq, Serialize, Deserialize)]
273273
pub enum Direction {
274274
/// Inherit from parent node
275275
#[default]
@@ -284,7 +284,7 @@ pub enum Direction {
284284
///
285285
/// Part of the [`Style`] component.
286286
#[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)]
287-
#[reflect_value(PartialEq, Serialize, Deserialize)]
287+
#[reflect(PartialEq, Serialize, Deserialize)]
288288
pub enum Display {
289289
/// Use Flexbox layout model to determine the position of this [`Node`].
290290
#[default]
@@ -298,7 +298,7 @@ pub enum Display {
298298

299299
/// Defines how flexbox items are ordered within a flexbox
300300
#[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)]
301-
#[reflect_value(PartialEq, Serialize, Deserialize)]
301+
#[reflect(PartialEq, Serialize, Deserialize)]
302302
pub enum FlexDirection {
303303
/// Same way as text direction along the main axis
304304
#[default]
@@ -313,7 +313,7 @@ pub enum FlexDirection {
313313

314314
/// Defines how items are aligned according to the main axis
315315
#[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)]
316-
#[reflect_value(PartialEq, Serialize, Deserialize)]
316+
#[reflect(PartialEq, Serialize, Deserialize)]
317317
pub enum JustifyContent {
318318
/// Pushed towards the start
319319
#[default]
@@ -332,7 +332,7 @@ pub enum JustifyContent {
332332

333333
/// Whether to show or hide overflowing items
334334
#[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Reflect, Serialize, Deserialize)]
335-
#[reflect_value(PartialEq, Serialize, Deserialize)]
335+
#[reflect(PartialEq, Serialize, Deserialize)]
336336
pub enum Overflow {
337337
/// Show overflowing items
338338
#[default]
@@ -343,7 +343,7 @@ pub enum Overflow {
343343

344344
/// The strategy used to position this node
345345
#[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)]
346-
#[reflect_value(PartialEq, Serialize, Deserialize)]
346+
#[reflect(PartialEq, Serialize, Deserialize)]
347347
pub enum PositionType {
348348
/// Relative to all other nodes with the [`PositionType::Relative`] value
349349
#[default]
@@ -356,7 +356,7 @@ pub enum PositionType {
356356

357357
/// Defines if flexbox items appear on a single line or on multiple lines
358358
#[derive(Copy, Clone, PartialEq, Eq, Debug, Default, Serialize, Deserialize, Reflect)]
359-
#[reflect_value(PartialEq, Serialize, Deserialize)]
359+
#[reflect(PartialEq, Serialize, Deserialize)]
360360
pub enum FlexWrap {
361361
/// Single line, will overflow if needed
362362
#[default]

crates/bevy_ui/src/widget/image.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ use serde::{Deserialize, Serialize};
1212

1313
/// Describes how to resize the Image node
1414
#[derive(Component, Debug, Default, Clone, Reflect, Serialize, Deserialize)]
15-
#[reflect_value(Component, Serialize, Deserialize)]
15+
#[reflect(Component, Serialize, Deserialize)]
1616
pub enum ImageMode {
1717
/// Keep the aspect ratio of the image
1818
#[default]

0 commit comments

Comments
 (0)