Skip to content

Commit 51450c8

Browse files
committed
Add upcasting to the Reflect trait
1 parent 486994d commit 51450c8

File tree

9 files changed

+98
-0
lines changed

9 files changed

+98
-0
lines changed

crates/bevy_reflect/bevy_reflect_derive/src/lib.rs

+24
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,14 @@ fn impl_struct(
318318
fn reflect_partial_eq(&self, value: &dyn #bevy_reflect_path::Reflect) -> Option<bool> {
319319
#partial_eq_fn
320320
}
321+
322+
fn as_reflect(&self) -> &dyn #bevy_reflect_path::Reflect {
323+
self
324+
}
325+
326+
fn as_reflect_mut(&mut self) -> &mut dyn #bevy_reflect_path::Reflect {
327+
self
328+
}
321329
}
322330
})
323331
}
@@ -437,6 +445,14 @@ fn impl_tuple_struct(
437445
fn reflect_partial_eq(&self, value: &dyn #bevy_reflect_path::Reflect) -> Option<bool> {
438446
#partial_eq_fn
439447
}
448+
449+
fn as_reflect(&self) -> &dyn #bevy_reflect_path::Reflect {
450+
self
451+
}
452+
453+
fn as_reflect_mut(&mut self) -> &mut dyn #bevy_reflect_path::Reflect {
454+
self
455+
}
440456
}
441457
})
442458
}
@@ -512,6 +528,14 @@ fn impl_value(
512528
fn serializable(&self) -> Option<#bevy_reflect_path::serde::Serializable> {
513529
#serialize_fn
514530
}
531+
532+
fn as_reflect(&self) -> &dyn #bevy_reflect_path::Reflect {
533+
self
534+
}
535+
536+
fn as_reflect_mut(&mut self) -> &mut dyn #bevy_reflect_path::Reflect {
537+
self
538+
}
515539
}
516540
})
517541
}

crates/bevy_reflect/src/impls/smallvec.rs

+8
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,12 @@ where
9393
fn serializable(&self) -> Option<Serializable> {
9494
None
9595
}
96+
97+
fn as_reflect(&self) -> &dyn Reflect {
98+
self
99+
}
100+
101+
fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
102+
self
103+
}
96104
}

crates/bevy_reflect/src/impls/std.rs

+16
Original file line numberDiff line numberDiff line change
@@ -104,6 +104,14 @@ impl<T: Reflect> Reflect for Vec<T> {
104104
fn serializable(&self) -> Option<Serializable> {
105105
None
106106
}
107+
108+
fn as_reflect(&self) -> &dyn Reflect {
109+
self
110+
}
111+
112+
fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
113+
self
114+
}
107115
}
108116

109117
impl<K: Reflect + Clone + Eq + Hash, V: Reflect + Clone> Map for HashMap<K, V> {
@@ -198,4 +206,12 @@ impl<K: Reflect + Clone + Eq + Hash, V: Reflect + Clone> Reflect for HashMap<K,
198206
fn serializable(&self) -> Option<Serializable> {
199207
None
200208
}
209+
210+
fn as_reflect(&self) -> &dyn Reflect {
211+
self
212+
}
213+
214+
fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
215+
self
216+
}
201217
}

crates/bevy_reflect/src/list.rs

+8
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,14 @@ impl Reflect for DynamicList {
122122
fn serializable(&self) -> Option<Serializable> {
123123
None
124124
}
125+
126+
fn as_reflect(&self) -> &dyn Reflect {
127+
self
128+
}
129+
130+
fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
131+
self
132+
}
125133
}
126134

127135
pub struct ListIter<'a> {

crates/bevy_reflect/src/map.rs

+8
Original file line numberDiff line numberDiff line change
@@ -141,6 +141,14 @@ impl Reflect for DynamicMap {
141141
fn serializable(&self) -> Option<Serializable> {
142142
None
143143
}
144+
145+
fn as_reflect(&self) -> &dyn Reflect {
146+
self
147+
}
148+
149+
fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
150+
self
151+
}
144152
}
145153

146154
pub struct MapIter<'a> {

crates/bevy_reflect/src/reflect.rs

+2
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ pub trait Reflect: Any + Send + Sync {
3939
fn reflect_partial_eq(&self, _value: &dyn Reflect) -> Option<bool>;
4040
/// Returns a serializable value, if serialization is supported. Otherwise `None` will be returned.
4141
fn serializable(&self) -> Option<Serializable>;
42+
fn as_reflect(&self) -> &dyn Reflect;
43+
fn as_reflect_mut(&mut self) -> &mut dyn Reflect;
4244
}
4345

4446
impl Debug for dyn Reflect {

crates/bevy_reflect/src/struct_trait.rs

+8
Original file line numberDiff line numberDiff line change
@@ -227,6 +227,14 @@ impl Reflect for DynamicStruct {
227227
fn serializable(&self) -> Option<Serializable> {
228228
None
229229
}
230+
231+
fn as_reflect(&self) -> &dyn Reflect {
232+
self
233+
}
234+
235+
fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
236+
self
237+
}
230238
}
231239

232240
#[inline]

crates/bevy_reflect/src/tuple.rs

+16
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,14 @@ impl Reflect for DynamicTuple {
165165
fn serializable(&self) -> Option<Serializable> {
166166
None
167167
}
168+
169+
fn as_reflect(&self) -> &dyn Reflect {
170+
self
171+
}
172+
173+
fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
174+
self
175+
}
168176
}
169177

170178
#[inline]
@@ -291,6 +299,14 @@ macro_rules! impl_reflect_tuple {
291299
fn serializable(&self) -> Option<Serializable> {
292300
None
293301
}
302+
303+
fn as_reflect(&self) -> &dyn Reflect {
304+
self
305+
}
306+
307+
fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
308+
self
309+
}
294310
}
295311
}
296312
}

crates/bevy_reflect/src/tuple_struct.rs

+8
Original file line numberDiff line numberDiff line change
@@ -182,6 +182,14 @@ impl Reflect for DynamicTupleStruct {
182182
fn serializable(&self) -> Option<Serializable> {
183183
None
184184
}
185+
186+
fn as_reflect(&self) -> &dyn Reflect {
187+
self
188+
}
189+
190+
fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
191+
self
192+
}
185193
}
186194

187195
#[inline]

0 commit comments

Comments
 (0)