From d07c8a8fa7b90b838f7bbef1673b9bd83603b980 Mon Sep 17 00:00:00 2001 From: Jonathan Cornaz Date: Wed, 29 Dec 2021 21:04:26 +0000 Subject: [PATCH] Implement ReflectValue serialization for Duration (#3318) # Objective Resolves #3277 Currenty if we try to serialize a scene that contains a `Duration` (which is very common, since `Timer` contains one), we get an error saying: > Type 'core::time::Duration' does not support ReflectValue serialization ## Solution Let `Duration` implement `SerializeValue`. Co-authored-by: Jonathan Cornaz --- crates/bevy_reflect/src/impls/std.rs | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/crates/bevy_reflect/src/impls/std.rs b/crates/bevy_reflect/src/impls/std.rs index 9f4d7708ee..801ce2c032 100644 --- a/crates/bevy_reflect/src/impls/std.rs +++ b/crates/bevy_reflect/src/impls/std.rs @@ -34,7 +34,7 @@ impl_reflect_value!(String(Hash, PartialEq, Serialize, Deserialize)); impl_reflect_value!(Option Deserialize<'de> + Reflect + 'static>(Serialize, Deserialize)); impl_reflect_value!(HashSet Deserialize<'de> + Send + Sync + 'static>(Serialize, Deserialize)); impl_reflect_value!(Range Deserialize<'de> + Send + Sync + 'static>(Serialize, Deserialize)); -impl_reflect_value!(Duration); +impl_reflect_value!(Duration(Hash, PartialEq, Serialize, Deserialize)); impl_from_reflect_value!(bool); impl_from_reflect_value!(u8); @@ -364,3 +364,13 @@ impl FromReflect for Cow<'static, str> { Some(reflect.any().downcast_ref::>()?.clone()) } } + +#[cfg(test)] +mod tests { + use crate::Reflect; + + #[test] + fn can_serialize_duration() { + assert!(std::time::Duration::ZERO.serializable().is_some()) + } +}