bevy_reflect/impls/core/
time.rs1use crate::{
2 std_traits::{ReflectAdd, ReflectAddAssign, ReflectDefault, ReflectSub, ReflectSubAssign},
3 type_registry::{ReflectDeserialize, ReflectSerialize},
4};
5use bevy_reflect_derive::impl_reflect_opaque;
6
7impl_reflect_opaque!(::core::time::Duration(
8 Clone,
9 Debug,
10 Hash,
11 PartialEq,
12 PartialOrd,
13 Serialize,
14 Deserialize,
15 Default,
16 Add,
17 AddAssign,
18 Sub,
19 SubAssign,
20));
21
22#[cfg(test)]
23mod tests {
24 use alloc::boxed::Box;
25 use bevy_reflect::{ReflectSerialize, TypeRegistry};
26 use core::{any::TypeId, time::Duration};
27
28 use crate::prelude::{ReflectAdd, ReflectAddAssign, ReflectSub, ReflectSubAssign};
29
30 #[test]
31 fn can_serialize_duration() {
32 let mut type_registry = TypeRegistry::default();
33 type_registry.register::<Duration>();
34
35 let reflect_serialize = type_registry
36 .get_type_data::<ReflectSerialize>(TypeId::of::<Duration>())
37 .unwrap();
38 let _serializable = reflect_serialize.get_serializable(&Duration::ZERO);
39 }
40
41 #[test]
42 fn should_math_ops_duration() {
43 let mut registry = TypeRegistry::new();
44 registry.register::<Duration>();
45
46 let reflect_add = registry
47 .get_type_data::<ReflectAdd>(TypeId::of::<Duration>())
48 .unwrap();
49 let reflect_add_assign = registry
50 .get_type_data::<ReflectAddAssign>(TypeId::of::<Duration>())
51 .unwrap();
52 let reflect_sub = registry
53 .get_type_data::<ReflectSub>(TypeId::of::<Duration>())
54 .unwrap();
55 let reflect_sub_assign = registry
56 .get_type_data::<ReflectSubAssign>(TypeId::of::<Duration>())
57 .unwrap();
58
59 let mut a = Duration::from_secs(10);
60 let b = Duration::from_secs(4);
61
62 assert_eq!(
63 reflect_add
64 .add(Box::new(a), Box::new(b))
65 .unwrap()
66 .reflect_partial_eq(&Duration::from_secs(14)),
67 Some(true)
68 );
69 assert_eq!(
70 reflect_sub
71 .sub(Box::new(a), Box::new(b))
72 .unwrap()
73 .reflect_partial_eq(&Duration::from_secs(6)),
74 Some(true)
75 );
76
77 reflect_add_assign.add_assign(&mut a, Box::new(b)).unwrap();
78 assert_eq!(a, Duration::from_secs(14));
79
80 reflect_sub_assign.sub_assign(&mut a, Box::new(b)).unwrap();
81 assert_eq!(a, Duration::from_secs(10));
82 }
83}