Skip to content

Commit

Permalink
Add upcasting to the Reflect trait
Browse files Browse the repository at this point in the history
  • Loading branch information
Davier committed Jan 29, 2021
1 parent 486994d commit 8522dc2
Show file tree
Hide file tree
Showing 9 changed files with 98 additions and 0 deletions.
24 changes: 24 additions & 0 deletions crates/bevy_reflect/bevy_reflect_derive/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -318,6 +318,14 @@ fn impl_struct(
fn reflect_partial_eq(&self, value: &dyn #bevy_reflect_path::Reflect) -> Option<bool> {
#partial_eq_fn
}

fn as_reflect(&self) -> &dyn #bevy_reflect_path::Reflect {
self
}

fn as_reflect_mut(&mut self) -> &mut dyn #bevy_reflect_path::Reflect {
self
}
}
})
}
Expand Down Expand Up @@ -437,6 +445,14 @@ fn impl_tuple_struct(
fn reflect_partial_eq(&self, value: &dyn #bevy_reflect_path::Reflect) -> Option<bool> {
#partial_eq_fn
}

fn as_reflect(&self) -> &dyn #bevy_reflect_path::Reflect {
self
}

fn as_reflect_mut(&mut self) -> &mut dyn #bevy_reflect_path::Reflect {
self
}
}
})
}
Expand Down Expand Up @@ -512,6 +528,14 @@ fn impl_value(
fn serializable(&self) -> Option<#bevy_reflect_path::serde::Serializable> {
#serialize_fn
}

fn as_reflect(&self) -> &dyn #bevy_reflect_path::Reflect {
self
}

fn as_reflect_mut(&mut self) -> &mut dyn #bevy_reflect_path::Reflect {
self
}
}
})
}
Expand Down
8 changes: 8 additions & 0 deletions crates/bevy_reflect/src/impls/smallvec.rs
Original file line number Diff line number Diff line change
Expand Up @@ -93,4 +93,12 @@ where
fn serializable(&self) -> Option<Serializable> {
None
}

fn as_reflect(&self) -> &dyn Reflect {
self
}

fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
self
}
}
16 changes: 16 additions & 0 deletions crates/bevy_reflect/src/impls/std.rs
Original file line number Diff line number Diff line change
Expand Up @@ -104,6 +104,14 @@ impl<T: Reflect> Reflect for Vec<T> {
fn serializable(&self) -> Option<Serializable> {
None
}

fn as_reflect(&self) -> &dyn Reflect {
self
}

fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
self
}
}

impl<K: Reflect + Clone + Eq + Hash, V: Reflect + Clone> Map for HashMap<K, V> {
Expand Down Expand Up @@ -198,4 +206,12 @@ impl<K: Reflect + Clone + Eq + Hash, V: Reflect + Clone> Reflect for HashMap<K,
fn serializable(&self) -> Option<Serializable> {
None
}

fn as_reflect(&self) -> &dyn Reflect {
self
}

fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
self
}
}
8 changes: 8 additions & 0 deletions crates/bevy_reflect/src/list.rs
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,14 @@ impl Reflect for DynamicList {
fn serializable(&self) -> Option<Serializable> {
None
}

fn as_reflect(&self) -> &dyn Reflect {
self
}

fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
self
}
}

pub struct ListIter<'a> {
Expand Down
8 changes: 8 additions & 0 deletions crates/bevy_reflect/src/map.rs
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,14 @@ impl Reflect for DynamicMap {
fn serializable(&self) -> Option<Serializable> {
None
}

fn as_reflect(&self) -> &dyn Reflect {
self
}

fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
self
}
}

pub struct MapIter<'a> {
Expand Down
2 changes: 2 additions & 0 deletions crates/bevy_reflect/src/reflect.rs
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,8 @@ pub trait Reflect: Any + Send + Sync {
fn reflect_partial_eq(&self, _value: &dyn Reflect) -> Option<bool>;
/// Returns a serializable value, if serialization is supported. Otherwise `None` will be returned.
fn serializable(&self) -> Option<Serializable>;
fn as_reflect(&self) -> &dyn Reflect;
fn as_reflect_mut(&mut self) -> &mut dyn Reflect;
}

impl Debug for dyn Reflect {
Expand Down
8 changes: 8 additions & 0 deletions crates/bevy_reflect/src/struct_trait.rs
Original file line number Diff line number Diff line change
Expand Up @@ -227,6 +227,14 @@ impl Reflect for DynamicStruct {
fn serializable(&self) -> Option<Serializable> {
None
}

fn as_reflect(&self) -> &dyn Reflect {
self
}

fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
self
}
}

#[inline]
Expand Down
16 changes: 16 additions & 0 deletions crates/bevy_reflect/src/tuple.rs
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,14 @@ impl Reflect for DynamicTuple {
fn serializable(&self) -> Option<Serializable> {
None
}

fn as_reflect(&self) -> &dyn Reflect {
self
}

fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
self
}
}

#[inline]
Expand Down Expand Up @@ -291,6 +299,14 @@ macro_rules! impl_reflect_tuple {
fn serializable(&self) -> Option<Serializable> {
None
}

fn as_reflect(&self) -> &dyn Reflect {
self
}

fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
self
}
}
}
}
Expand Down
8 changes: 8 additions & 0 deletions crates/bevy_reflect/src/tuple_struct.rs
Original file line number Diff line number Diff line change
Expand Up @@ -182,6 +182,14 @@ impl Reflect for DynamicTupleStruct {
fn serializable(&self) -> Option<Serializable> {
None
}

fn as_reflect(&self) -> &dyn Reflect {
self
}

fn as_reflect_mut(&mut self) -> &mut dyn Reflect {
self
}
}

#[inline]
Expand Down

0 comments on commit 8522dc2

Please sign in to comment.