bevy/crates/bevy_ecs/src
Carter Anderson b73811d40e
Remove ChildOf::get and Deref impl (#18080)
# Objective

There are currently three ways to access the parent stored on a ChildOf
relationship:

1. `child_of.parent` (field accessor)
2. `child_of.get()` (get function)
3. `**child_of` (Deref impl)

I will assert that we should only have one (the field accessor), and
that the existence of the other implementations causes confusion and
legibility issues. The deref approach is heinous, and `child_of.get()`
is significantly less clear than `child_of.parent`.

## Solution

Remove `impl Deref for ChildOf` and `ChildOf::get`.

The one "downside" I'm seeing is that:

```rust
entity.get::<ChildOf>().map(ChildOf::get)
```
Becomes this:

```rust
entity.get::<ChildOf>().map(|c| c.parent)
```

I strongly believe that this is worth the increased clarity and
consistency. I'm also not really a huge fan of the "pass function
pointer to map" syntax. I think most people don't think this way about
maps. They think in terms of a function that takes the item in the
Option and returns the result of some action on it.

## Migration Guide

```rust
// Before
**child_of
// After
child_of.parent

// Before
child_of.get()
// After
child_of.parent

// Before
entity.get::<ChildOf>().map(ChildOf::get)
// After
entity.get::<ChildOf>().map(|c| c.parent)
```
2025-02-27 23:11:03 +00:00
..
entity Change ChildOf to Childof { parent: Entity} and support deriving Relationship and RelationshipTarget with named structs (#17905) 2025-02-27 19:22:17 +00:00
event Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
identifier Harden proc macro path resolution and add integration tests. (#17330) 2025-02-09 19:45:45 +00:00
observer Handle TriggerTargets that are combinations for components/entities (#18024) 2025-02-24 23:57:34 +00:00
query Fix unsoundness in QueryIter::sort_by (#17826) 2025-02-26 20:36:37 +00:00
reflect Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
relationship Change Commands::get_entity to return Result and remove panic from Commands::entity (#18043) 2025-02-27 21:05:16 +00:00
schedule Bubble sync points if ignore_deferred, do not ignore if target system is exclusive (#17880) 2025-02-26 20:39:23 +00:00
storage Handle TriggerTargets that are combinations for components/entities (#18024) 2025-02-24 23:57:34 +00:00
system Change Commands::get_entity to return Result and remove panic from Commands::entity (#18043) 2025-02-27 21:05:16 +00:00
world Add missing unsafe to entity_command::insert_by_id and make it more configurable (#18052) 2025-02-27 06:20:32 +00:00
archetype.rs Move hashbrown and foldhash out of bevy_utils (#17460) 2025-01-23 16:46:08 +00:00
batching.rs Fix *most* clippy lints (#15906) 2024-10-14 20:52:35 +00:00
bundle.rs Encapsulate cfg(feature = "track_location") in a type. (#17602) 2025-02-10 21:21:20 +00:00
change_detection.rs Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
component.rs Deduplicate register_inherited_required_components (#16519) 2025-02-25 23:59:58 +00:00
entity_disabling.rs Allow users to register their own disabling components / default query filters (#17768) 2025-02-11 18:25:32 +00:00
hierarchy.rs Remove ChildOf::get and Deref impl (#18080) 2025-02-27 23:11:03 +00:00
intern.rs Move hashbrown and foldhash out of bevy_utils (#17460) 2025-01-23 16:46:08 +00:00
label.rs do_not_recommend interned Labels (#17950) 2025-02-25 23:46:21 +00:00
lib.rs Upgrade to Rust Edition 2024 (#17967) 2025-02-24 03:54:47 +00:00
name.rs Harden proc macro path resolution and add integration tests. (#17330) 2025-02-09 19:45:45 +00:00
removal_detection.rs Harden proc macro path resolution and add integration tests. (#17330) 2025-02-09 19:45:45 +00:00
resource.rs Move Resource trait to its own file (#17469) 2025-01-21 19:47:08 +00:00
result.rs feat(ecs): configurable error handling for fallible systems (#17753) 2025-02-11 18:36:08 +00:00
spawn.rs Improved Spawn APIs and Bundle Effects (#17521) 2025-02-09 23:32:56 +00:00
traversal.rs Relationships (non-fragmenting, one-to-many) (#17398) 2025-01-18 22:20:30 +00:00