From 7142872159bbed022d5dbe65507c5bcad66ebf27 Mon Sep 17 00:00:00 2001 From: Jakob Hellermann Date: Thu, 8 Sep 2022 21:52:11 +0200 Subject: [PATCH 1/2] relax ?Sized bounds around change detection types --- crates/bevy_ecs/src/change_detection.rs | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/crates/bevy_ecs/src/change_detection.rs b/crates/bevy_ecs/src/change_detection.rs index b35d996f1a5e0..c7f9bf144d8cd 100644 --- a/crates/bevy_ecs/src/change_detection.rs +++ b/crates/bevy_ecs/src/change_detection.rs @@ -69,7 +69,7 @@ pub trait DetectChanges { macro_rules! change_detection_impl { ($name:ident < $( $generics:tt ),+ >, $target:ty, $($traits:ident)?) => { - impl<$($generics),* $(: $traits)?> DetectChanges for $name<$($generics),*> { + impl<$($generics),* : ?Sized $(+ $traits)?> DetectChanges for $name<$($generics),*> { #[inline] fn is_added(&self) -> bool { self.ticks @@ -97,7 +97,7 @@ macro_rules! change_detection_impl { } } - impl<$($generics),* $(: $traits)?> Deref for $name<$($generics),*> { + impl<$($generics),*: ?Sized $(+ $traits)?> Deref for $name<$($generics),*> { type Target = $target; #[inline] @@ -106,7 +106,7 @@ macro_rules! change_detection_impl { } } - impl<$($generics),* $(: $traits)?> DerefMut for $name<$($generics),*> { + impl<$($generics),* : ?Sized $(+ $traits)?> DerefMut for $name<$($generics),*> { #[inline] fn deref_mut(&mut self) -> &mut Self::Target { self.set_changed(); @@ -130,9 +130,10 @@ macro_rules! change_detection_impl { }; } + macro_rules! impl_into_inner { ($name:ident < $( $generics:tt ),+ >, $target:ty, $($traits:ident)?) => { - impl<$($generics),* $(: $traits)?> $name<$($generics),*> { + impl<$($generics),* : ?Sized $(+ $traits)?> $name<$($generics),*> { /// Consume `self` and return a mutable reference to the /// contained value while marking `self` as "changed". #[inline] @@ -146,12 +147,12 @@ macro_rules! impl_into_inner { macro_rules! impl_debug { ($name:ident < $( $generics:tt ),+ >, $($traits:ident)?) => { - impl<$($generics),* $(: $traits)?> std::fmt::Debug for $name<$($generics),*> + impl<$($generics),* : ?Sized $(+ $traits)?> std::fmt::Debug for $name<$($generics),*> where T: std::fmt::Debug { fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { f.debug_tuple(stringify!($name)) - .field(self.value) + .field(&self.value) .finish() } } @@ -176,7 +177,7 @@ pub(crate) struct Ticks<'a> { /// Panics when used as a [`SystemParam`](crate::system::SystemParam) if the resource does not exist. /// /// Use `Option>` instead if the resource might not always exist. -pub struct ResMut<'a, T: Resource> { +pub struct ResMut<'a, T: ?Sized + Resource> { pub(crate) value: &'a mut T, pub(crate) ticks: Ticks<'a>, } @@ -208,7 +209,7 @@ impl<'a, T: Resource> From> for Mut<'a, T> { /// Panics when used as a `SystemParameter` if the resource does not exist. /// /// Use `Option>` instead if the resource might not always exist. -pub struct NonSendMut<'a, T: 'static> { +pub struct NonSendMut<'a, T: ?Sized + 'static> { pub(crate) value: &'a mut T, pub(crate) ticks: Ticks<'a>, } From 7b1a8b477340f09c7d46241cc236946bf7cf98bf Mon Sep 17 00:00:00 2001 From: Jakob Hellermann Date: Thu, 8 Sep 2022 21:58:04 +0200 Subject: [PATCH 2/2] fmt --- crates/bevy_ecs/src/change_detection.rs | 1 - 1 file changed, 1 deletion(-) diff --git a/crates/bevy_ecs/src/change_detection.rs b/crates/bevy_ecs/src/change_detection.rs index c7f9bf144d8cd..033335ea8bc01 100644 --- a/crates/bevy_ecs/src/change_detection.rs +++ b/crates/bevy_ecs/src/change_detection.rs @@ -130,7 +130,6 @@ macro_rules! change_detection_impl { }; } - macro_rules! impl_into_inner { ($name:ident < $( $generics:tt ),+ >, $target:ty, $($traits:ident)?) => { impl<$($generics),* : ?Sized $(+ $traits)?> $name<$($generics),*> {