summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--engine-reflection/src/lib.rs6
1 files changed, 6 insertions, 0 deletions
diff --git a/engine-reflection/src/lib.rs b/engine-reflection/src/lib.rs
index 76dc71d..dedfee7 100644
--- a/engine-reflection/src/lib.rs
+++ b/engine-reflection/src/lib.rs
@@ -356,6 +356,7 @@ pub struct Reference
{
pub ty: &'static Type,
pub cast_dyn_any: CastDynAnyFn,
+ pub try_deref: fn(target: &dyn Any) -> Option<&dyn Any>,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash)]
@@ -491,6 +492,11 @@ unsafe impl<T: Reflection> Reflection for &'static T
const TYPE_REFLECTION: &Type = &Type::Reference(Reference {
ty: T::TYPE_REFLECTION,
cast_dyn_any: |ptr| ptr.cast::<Self>(),
+ try_deref: |target| {
+ let target = target.downcast_ref::<Self>()?;
+
+ Some(*target)
+ },
});
}