From 8dd3249da451b9000be523831a8f001f3a211277 Mon Sep 17 00:00:00 2001 From: Maxwell Odri Date: Wed, 3 Aug 2022 17:03:42 +1000 Subject: [PATCH 1/3] Added reflect/from reflect impls for NonZero integer types --- crates/bevy_reflect/src/impls/std.rs | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/crates/bevy_reflect/src/impls/std.rs b/crates/bevy_reflect/src/impls/std.rs index 079cb89ab0660..20059b343d16f 100644 --- a/crates/bevy_reflect/src/impls/std.rs +++ b/crates/bevy_reflect/src/impls/std.rs @@ -14,6 +14,10 @@ use std::{ any::Any, borrow::Cow, hash::{Hash, Hasher}, + num::{ + NonZeroI128, NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI8, NonZeroIsize, NonZeroU128, + NonZeroU16, NonZeroU32, NonZeroU64, NonZeroU8, NonZeroUsize, + }, ops::Range, }; @@ -39,6 +43,18 @@ impl_reflect_value!(HashSet()); impl_reflect_value!(Range()); impl_reflect_value!(Duration(Debug, Hash, PartialEq, Serialize, Deserialize)); impl_reflect_value!(Instant(Debug, Hash, PartialEq)); +impl_reflect_value!(NonZeroI128(Debug, Hash, PartialEq, Serialize, Deserialize)); +impl_reflect_value!(NonZeroU128(Debug, Hash, PartialEq, Serialize, Deserialize)); +impl_reflect_value!(NonZeroIsize(Debug, Hash, PartialEq, Serialize, Deserialize)); +impl_reflect_value!(NonZeroUsize(Debug, Hash, PartialEq, Serialize, Deserialize)); +impl_reflect_value!(NonZeroI64(Debug, Hash, PartialEq, Serialize, Deserialize)); +impl_reflect_value!(NonZeroU64(Debug, Hash, PartialEq, Serialize, Deserialize)); +impl_reflect_value!(NonZeroU32(Debug, Hash, PartialEq, Serialize, Deserialize)); +impl_reflect_value!(NonZeroI32(Debug, Hash, PartialEq, Serialize, Deserialize)); +impl_reflect_value!(NonZeroI16(Debug, Hash, PartialEq, Serialize, Deserialize)); +impl_reflect_value!(NonZeroU16(Debug, Hash, PartialEq, Serialize, Deserialize)); +impl_reflect_value!(NonZeroU8(Debug, Hash, PartialEq, Serialize, Deserialize)); +impl_reflect_value!(NonZeroI8(Debug, Hash, PartialEq, Serialize, Deserialize)); impl_from_reflect_value!(bool); impl_from_reflect_value!(char); @@ -60,6 +76,18 @@ impl_from_reflect_value!(String); impl_from_reflect_value!(HashSet); impl_from_reflect_value!(Range); impl_from_reflect_value!(Duration); +impl_from_reflect_value!(NonZeroI128); +impl_from_reflect_value!(NonZeroU128); +impl_from_reflect_value!(NonZeroIsize); +impl_from_reflect_value!(NonZeroUsize); +impl_from_reflect_value!(NonZeroI64); +impl_from_reflect_value!(NonZeroU64); +impl_from_reflect_value!(NonZeroU32); +impl_from_reflect_value!(NonZeroI32); +impl_from_reflect_value!(NonZeroI16); +impl_from_reflect_value!(NonZeroU16); +impl_from_reflect_value!(NonZeroU8); +impl_from_reflect_value!(NonZeroI8); impl Array for Vec { #[inline] From 8c3c95297def67d43f41ef4d2295ffc27b8abf82 Mon Sep 17 00:00:00 2001 From: Maxwell Odri Date: Wed, 3 Aug 2022 18:55:08 +1000 Subject: [PATCH 2/3] Added test for correctly working reflect/from reflect impls --- crates/bevy_reflect/src/impls/std.rs | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/crates/bevy_reflect/src/impls/std.rs b/crates/bevy_reflect/src/impls/std.rs index 20059b343d16f..0e30446fca0d7 100644 --- a/crates/bevy_reflect/src/impls/std.rs +++ b/crates/bevy_reflect/src/impls/std.rs @@ -971,4 +971,12 @@ mod tests { panic!("Expected `TypeInfo::Enum`"); } } + #[test] + fn nonzero_usize_impl_reflect_from_reflect() { + let a: &dyn Reflect = &std::num::NonZeroUsize::new(42).unwrap(); + let b = a.clone(); + assert!(a.reflect_partial_eq(b).unwrap_or_default()); + let forty_two: std::num::NonZeroUsize = crate::FromReflect::from_reflect(a).unwrap(); + assert_eq!(forty_two, std::num::NonZeroUsize::new(42).unwrap()); + } } From 672976fa6a186f9f7492b069812a705eb3f1ee5d Mon Sep 17 00:00:00 2001 From: Maxwell Odri Date: Wed, 3 Aug 2022 19:07:56 +1000 Subject: [PATCH 3/3] Fixed test / CI warnings --- crates/bevy_reflect/src/impls/std.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_reflect/src/impls/std.rs b/crates/bevy_reflect/src/impls/std.rs index 0e30446fca0d7..7b66aba360249 100644 --- a/crates/bevy_reflect/src/impls/std.rs +++ b/crates/bevy_reflect/src/impls/std.rs @@ -974,7 +974,7 @@ mod tests { #[test] fn nonzero_usize_impl_reflect_from_reflect() { let a: &dyn Reflect = &std::num::NonZeroUsize::new(42).unwrap(); - let b = a.clone(); + let b: &dyn Reflect = &std::num::NonZeroUsize::new(42).unwrap(); assert!(a.reflect_partial_eq(b).unwrap_or_default()); let forty_two: std::num::NonZeroUsize = crate::FromReflect::from_reflect(a).unwrap(); assert_eq!(forty_two, std::num::NonZeroUsize::new(42).unwrap());