Skip to content

[Merged by Bors] - Use a default implementation for set_if_neq#7660

Closed
joseph-gio wants to merge 8 commits intobevyengine:mainfrom
joseph-gio:unsized-change-detection
Closed

[Merged by Bors] - Use a default implementation for set_if_neq#7660
joseph-gio wants to merge 8 commits intobevyengine:mainfrom
joseph-gio:unsized-change-detection

Conversation

@joseph-gio
Copy link
Member

@joseph-gio joseph-gio commented Feb 13, 2023

Objective

While porting my crate bevy_trait_query to bevy 0.10, I ran into an issue with the DetectChangesMut trait. Due to the way that the set_if_neq method (added in #6853) is implemented, you are forced to write a nonsense implementation of it for dynamically sized types. This edge case shows up when implementing trait queries, since DetectChangesMut is implemented for Mut<dyn Trait>.

Solution

Simplify the generics for set_if_neq and add the where Self::Target: Sized trait bound to it. Add a default implementation so implementers don't need to implement a method with nonsensical trait bounds.

@joseph-gio joseph-gio added C-Bug An unexpected or incorrect behavior A-ECS Entities, components, systems, and events C-Usability A targeted quality-of-life change that makes Bevy easier to use labels Feb 13, 2023
@joseph-gio joseph-gio removed the C-Bug An unexpected or incorrect behavior label Feb 14, 2023
@joseph-gio joseph-gio changed the title Allow change detection for dynamically sized types. Use a default implementation for set_if_neq Feb 14, 2023
@alice-i-cecile alice-i-cecile added the C-Code-Quality A section of code that is hard to understand or change label Feb 15, 2023
@james7132 james7132 added the S-Ready-For-Final-Review This PR has been approved by the community. It's ready for a maintainer to consider merging it label Feb 15, 2023
@alice-i-cecile
Copy link
Member

bors r+

bors bot pushed a commit that referenced this pull request Feb 15, 2023
# Objective

While porting my crate `bevy_trait_query` to bevy 0.10, I ran into an issue with the `DetectChangesMut` trait. Due to the way that the `set_if_neq` method (added in #6853) is implemented, you are forced to write a nonsense implementation of it for dynamically sized types. This edge case shows up when implementing trait queries, since `DetectChangesMut` is implemented for `Mut<dyn Trait>`.

## Solution

Simplify the generics for `set_if_neq` and add the `where Self::Target: Sized` trait bound to it. Add a default implementation so implementers don't need to implement a method with nonsensical trait bounds.
@bors bors bot changed the title Use a default implementation for set_if_neq [Merged by Bors] - Use a default implementation for set_if_neq Feb 15, 2023
@bors bors bot closed this Feb 15, 2023
@joseph-gio joseph-gio deleted the unsized-change-detection branch February 16, 2023 02:46
myreprise1 pushed a commit to myreprise1/bevy that referenced this pull request Feb 16, 2023
# Objective

While porting my crate `bevy_trait_query` to bevy 0.10, I ran into an issue with the `DetectChangesMut` trait. Due to the way that the `set_if_neq` method (added in bevyengine#6853) is implemented, you are forced to write a nonsense implementation of it for dynamically sized types. This edge case shows up when implementing trait queries, since `DetectChangesMut` is implemented for `Mut<dyn Trait>`.

## Solution

Simplify the generics for `set_if_neq` and add the `where Self::Target: Sized` trait bound to it. Add a default implementation so implementers don't need to implement a method with nonsensical trait bounds.
myreprise1 pushed a commit to myreprise1/bevy that referenced this pull request Feb 16, 2023
# Objective

While porting my crate `bevy_trait_query` to bevy 0.10, I ran into an issue with the `DetectChangesMut` trait. Due to the way that the `set_if_neq` method (added in bevyengine#6853) is implemented, you are forced to write a nonsense implementation of it for dynamically sized types. This edge case shows up when implementing trait queries, since `DetectChangesMut` is implemented for `Mut<dyn Trait>`.

## Solution

Simplify the generics for `set_if_neq` and add the `where Self::Target: Sized` trait bound to it. Add a default implementation so implementers don't need to implement a method with nonsensical trait bounds.
joseph-gio added a commit to joseph-gio/bevy-trait-query that referenced this pull request Feb 16, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-ECS Entities, components, systems, and events C-Code-Quality A section of code that is hard to understand or change C-Usability A targeted quality-of-life change that makes Bevy easier to use S-Ready-For-Final-Review This PR has been approved by the community. It's ready for a maintainer to consider merging it

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants