From 1dcbb9498632654dc811105d44a497c1cd8a6d81 Mon Sep 17 00:00:00 2001 From: Afonso Lage Date: Tue, 5 Jul 2022 06:39:27 -0300 Subject: [PATCH 1/9] Updated struct_trait --- crates/bevy_reflect/src/struct_trait.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/bevy_reflect/src/struct_trait.rs b/crates/bevy_reflect/src/struct_trait.rs index 6f5075d990081..25f0056438b07 100644 --- a/crates/bevy_reflect/src/struct_trait.rs +++ b/crates/bevy_reflect/src/struct_trait.rs @@ -452,8 +452,9 @@ pub fn struct_partial_eq(a: &S, b: &dyn Reflect) -> Option { for (i, value) in struct_value.iter_fields().enumerate() { let name = struct_value.name_at(i).unwrap(); if let Some(field_value) = a.field(name) { - if let Some(false) | None = field_value.reflect_partial_eq(value) { - return Some(false); + let eq_result = field_value.reflect_partial_eq(value); + if let failed @ (Some(false) | None) = eq_result { + return failed; } } else { return Some(false); From facf9ed2474be6b6846bf964564530960c800132 Mon Sep 17 00:00:00 2001 From: Afonso Lage Date: Tue, 5 Jul 2022 06:40:53 -0300 Subject: [PATCH 2/9] Updated tuple_struct --- crates/bevy_reflect/src/tuple_struct.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/bevy_reflect/src/tuple_struct.rs b/crates/bevy_reflect/src/tuple_struct.rs index 27ded3e919984..7f4b6767e28c1 100644 --- a/crates/bevy_reflect/src/tuple_struct.rs +++ b/crates/bevy_reflect/src/tuple_struct.rs @@ -363,8 +363,9 @@ pub fn tuple_struct_partial_eq(a: &S, b: &dyn Reflect) -> Option for (i, value) in tuple_struct.iter_fields().enumerate() { if let Some(field_value) = a.field(i) { - if let Some(false) | None = field_value.reflect_partial_eq(value) { - return Some(false); + let eq_result = field_value.reflect_partial_eq(value); + if let failed @ (Some(false) | None) = eq_result { + return failed; } } else { return Some(false); From 77ca8868b8c90a25402383f4264f4353ed7a0316 Mon Sep 17 00:00:00 2001 From: Afonso Lage Date: Tue, 5 Jul 2022 06:42:22 -0300 Subject: [PATCH 3/9] Updated tuple --- crates/bevy_reflect/src/tuple.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crates/bevy_reflect/src/tuple.rs b/crates/bevy_reflect/src/tuple.rs index c01f798c8920e..83a09a0015165 100644 --- a/crates/bevy_reflect/src/tuple.rs +++ b/crates/bevy_reflect/src/tuple.rs @@ -383,7 +383,7 @@ pub fn tuple_partial_eq(a: &T, b: &dyn Reflect) -> Option { for (a_field, b_field) in a.iter_fields().zip(b.iter_fields()) { match a_field.reflect_partial_eq(b_field) { - Some(false) | None => return Some(false), + failed @ (Some(false) | None) => return failed, Some(true) => {} } } From c52483fc9b0f4e878f02932d02ae957c242a103c Mon Sep 17 00:00:00 2001 From: Afonso Lage Date: Tue, 5 Jul 2022 06:43:31 -0300 Subject: [PATCH 4/9] Updated array --- crates/bevy_reflect/src/array.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/bevy_reflect/src/array.rs b/crates/bevy_reflect/src/array.rs index 486966813dd65..5a080655a4125 100644 --- a/crates/bevy_reflect/src/array.rs +++ b/crates/bevy_reflect/src/array.rs @@ -332,8 +332,9 @@ pub fn array_partial_eq(array: &A, reflect: &dyn Reflect) -> Option { for (a, b) in array.iter().zip(reflect_array.iter()) { - if let Some(false) | None = a.reflect_partial_eq(b) { - return Some(false); + let eq_result = a.reflect_partial_eq(b); + if let failed @ (Some(false) | None) = eq_result { + return failed; } } } From 7819c8c363872f90036cce060e881b504cc39bd7 Mon Sep 17 00:00:00 2001 From: Afonso Lage Date: Tue, 5 Jul 2022 06:44:21 -0300 Subject: [PATCH 5/9] Updated list --- crates/bevy_reflect/src/list.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/bevy_reflect/src/list.rs b/crates/bevy_reflect/src/list.rs index 25d2f179b4b79..db3f7a0a629a4 100644 --- a/crates/bevy_reflect/src/list.rs +++ b/crates/bevy_reflect/src/list.rs @@ -306,8 +306,9 @@ pub fn list_partial_eq(a: &L, b: &dyn Reflect) -> Option { } for (a_value, b_value) in a.iter().zip(list.iter()) { - if let Some(false) | None = a_value.reflect_partial_eq(b_value) { - return Some(false); + let eq_result = a_value.reflect_partial_eq(b_value); + if let failed @ (Some(false) | None) = eq_result { + return failed; } } From 383f3cd26083639355d628cc20172c3552331150 Mon Sep 17 00:00:00 2001 From: Afonso Lage Date: Tue, 5 Jul 2022 06:45:17 -0300 Subject: [PATCH 6/9] Updated map --- crates/bevy_reflect/src/map.rs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/crates/bevy_reflect/src/map.rs b/crates/bevy_reflect/src/map.rs index 5824ba05a82d9..ee2e474a138b3 100644 --- a/crates/bevy_reflect/src/map.rs +++ b/crates/bevy_reflect/src/map.rs @@ -358,8 +358,9 @@ pub fn map_partial_eq(a: &M, b: &dyn Reflect) -> Option { for (key, value) in a.iter() { if let Some(map_value) = map.get(key) { - if let Some(false) | None = value.reflect_partial_eq(map_value) { - return Some(false); + let eq_result = value.reflect_partial_eq(map_value); + if let failed @ (Some(false) | None) = eq_result { + return failed; } } else { return Some(false); From 93f49a1b50eae26bf8752c3dc3234a3490745d39 Mon Sep 17 00:00:00 2001 From: Afonso Lage Date: Tue, 5 Jul 2022 06:50:01 -0300 Subject: [PATCH 7/9] Updated doc comments to reflect new changes --- crates/bevy_reflect/src/array.rs | 2 ++ crates/bevy_reflect/src/list.rs | 2 ++ crates/bevy_reflect/src/map.rs | 2 ++ crates/bevy_reflect/src/struct_trait.rs | 2 ++ crates/bevy_reflect/src/tuple.rs | 2 ++ crates/bevy_reflect/src/tuple_struct.rs | 2 ++ 6 files changed, 12 insertions(+) diff --git a/crates/bevy_reflect/src/array.rs b/crates/bevy_reflect/src/array.rs index 5a080655a4125..8bf3942bacd93 100644 --- a/crates/bevy_reflect/src/array.rs +++ b/crates/bevy_reflect/src/array.rs @@ -327,6 +327,8 @@ pub fn array_apply(array: &mut A, reflect: &dyn Reflect) { /// Compares two [arrays](Array) (one concrete and one reflected) to see if they /// are equal. +/// +/// Returns [`None`] if the comparison couldn't even be performed. #[inline] pub fn array_partial_eq(array: &A, reflect: &dyn Reflect) -> Option { match reflect.reflect_ref() { diff --git a/crates/bevy_reflect/src/list.rs b/crates/bevy_reflect/src/list.rs index db3f7a0a629a4..5c064549ddfda 100644 --- a/crates/bevy_reflect/src/list.rs +++ b/crates/bevy_reflect/src/list.rs @@ -293,6 +293,8 @@ pub fn list_apply(a: &mut L, b: &dyn Reflect) { /// - `b` is a list; /// - `b` is the same length as `a`; /// - [`Reflect::reflect_partial_eq`] returns `Some(true)` for pairwise elements of `a` and `b`. +/// +/// Returns [`None`] if the comparison couldn't even be performed. #[inline] pub fn list_partial_eq(a: &L, b: &dyn Reflect) -> Option { let list = if let ReflectRef::List(list) = b.reflect_ref() { diff --git a/crates/bevy_reflect/src/map.rs b/crates/bevy_reflect/src/map.rs index ee2e474a138b3..05c6305e4bba4 100644 --- a/crates/bevy_reflect/src/map.rs +++ b/crates/bevy_reflect/src/map.rs @@ -344,6 +344,8 @@ impl<'a> ExactSizeIterator for MapIter<'a> {} /// - `b` is the same length as `a`; /// - For each key-value pair in `a`, `b` contains a value for the given key, /// and [`Reflect::reflect_partial_eq`] returns `Some(true)` for the two values. +/// +/// Returns [`None`] if the comparison couldn't even be performed. #[inline] pub fn map_partial_eq(a: &M, b: &dyn Reflect) -> Option { let map = if let ReflectRef::Map(map) = b.reflect_ref() { diff --git a/crates/bevy_reflect/src/struct_trait.rs b/crates/bevy_reflect/src/struct_trait.rs index 25f0056438b07..98fbd7c38da2e 100644 --- a/crates/bevy_reflect/src/struct_trait.rs +++ b/crates/bevy_reflect/src/struct_trait.rs @@ -437,6 +437,8 @@ impl Typed for DynamicStruct { /// - For each field in `a`, `b` contains a field with the same name and /// [`Reflect::reflect_partial_eq`] returns `Some(true)` for the two field /// values. +/// +/// Returns [`None`] if the comparison couldn't even be performed. #[inline] pub fn struct_partial_eq(a: &S, b: &dyn Reflect) -> Option { let struct_value = if let ReflectRef::Struct(struct_value) = b.reflect_ref() { diff --git a/crates/bevy_reflect/src/tuple.rs b/crates/bevy_reflect/src/tuple.rs index 83a09a0015165..875f5ff8aea69 100644 --- a/crates/bevy_reflect/src/tuple.rs +++ b/crates/bevy_reflect/src/tuple.rs @@ -369,6 +369,8 @@ pub fn tuple_apply(a: &mut T, b: &dyn Reflect) { /// - `b` is a tuple; /// - `b` has the same number of elements as `a`; /// - [`Reflect::reflect_partial_eq`] returns `Some(true)` for pairwise elements of `a` and `b`. +/// +/// Returns [`None`] if the comparison couldn't even be performed. #[inline] pub fn tuple_partial_eq(a: &T, b: &dyn Reflect) -> Option { let b = if let ReflectRef::Tuple(tuple) = b.reflect_ref() { diff --git a/crates/bevy_reflect/src/tuple_struct.rs b/crates/bevy_reflect/src/tuple_struct.rs index 7f4b6767e28c1..507b6b4bfd117 100644 --- a/crates/bevy_reflect/src/tuple_struct.rs +++ b/crates/bevy_reflect/src/tuple_struct.rs @@ -349,6 +349,8 @@ impl Typed for DynamicTupleStruct { /// - `b` is a tuple struct; /// - `b` has the same number of fields as `a`; /// - [`Reflect::reflect_partial_eq`] returns `Some(true)` for pairwise fields of `a` and `b`. +/// +/// Returns [`None`] if the comparison couldn't even be performed. #[inline] pub fn tuple_struct_partial_eq(a: &S, b: &dyn Reflect) -> Option { let tuple_struct = if let ReflectRef::TupleStruct(tuple_struct) = b.reflect_ref() { From fc6751349dd865b0b4c64daf18c5c56de8686fe9 Mon Sep 17 00:00:00 2001 From: Afonso Lage Date: Tue, 5 Jul 2022 06:55:26 -0300 Subject: [PATCH 8/9] Fixed fmt --- crates/bevy_reflect/src/array.rs | 2 +- crates/bevy_reflect/src/list.rs | 2 +- crates/bevy_reflect/src/map.rs | 2 +- crates/bevy_reflect/src/struct_trait.rs | 2 +- crates/bevy_reflect/src/tuple.rs | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) diff --git a/crates/bevy_reflect/src/array.rs b/crates/bevy_reflect/src/array.rs index 8bf3942bacd93..a7c1da4185b29 100644 --- a/crates/bevy_reflect/src/array.rs +++ b/crates/bevy_reflect/src/array.rs @@ -327,7 +327,7 @@ pub fn array_apply(array: &mut A, reflect: &dyn Reflect) { /// Compares two [arrays](Array) (one concrete and one reflected) to see if they /// are equal. -/// +/// /// Returns [`None`] if the comparison couldn't even be performed. #[inline] pub fn array_partial_eq(array: &A, reflect: &dyn Reflect) -> Option { diff --git a/crates/bevy_reflect/src/list.rs b/crates/bevy_reflect/src/list.rs index 5c064549ddfda..9e8c0c65f651b 100644 --- a/crates/bevy_reflect/src/list.rs +++ b/crates/bevy_reflect/src/list.rs @@ -293,7 +293,7 @@ pub fn list_apply(a: &mut L, b: &dyn Reflect) { /// - `b` is a list; /// - `b` is the same length as `a`; /// - [`Reflect::reflect_partial_eq`] returns `Some(true)` for pairwise elements of `a` and `b`. -/// +/// /// Returns [`None`] if the comparison couldn't even be performed. #[inline] pub fn list_partial_eq(a: &L, b: &dyn Reflect) -> Option { diff --git a/crates/bevy_reflect/src/map.rs b/crates/bevy_reflect/src/map.rs index 05c6305e4bba4..080b0770390b4 100644 --- a/crates/bevy_reflect/src/map.rs +++ b/crates/bevy_reflect/src/map.rs @@ -344,7 +344,7 @@ impl<'a> ExactSizeIterator for MapIter<'a> {} /// - `b` is the same length as `a`; /// - For each key-value pair in `a`, `b` contains a value for the given key, /// and [`Reflect::reflect_partial_eq`] returns `Some(true)` for the two values. -/// +/// /// Returns [`None`] if the comparison couldn't even be performed. #[inline] pub fn map_partial_eq(a: &M, b: &dyn Reflect) -> Option { diff --git a/crates/bevy_reflect/src/struct_trait.rs b/crates/bevy_reflect/src/struct_trait.rs index 98fbd7c38da2e..60a9ba9e6125e 100644 --- a/crates/bevy_reflect/src/struct_trait.rs +++ b/crates/bevy_reflect/src/struct_trait.rs @@ -437,7 +437,7 @@ impl Typed for DynamicStruct { /// - For each field in `a`, `b` contains a field with the same name and /// [`Reflect::reflect_partial_eq`] returns `Some(true)` for the two field /// values. -/// +/// /// Returns [`None`] if the comparison couldn't even be performed. #[inline] pub fn struct_partial_eq(a: &S, b: &dyn Reflect) -> Option { diff --git a/crates/bevy_reflect/src/tuple.rs b/crates/bevy_reflect/src/tuple.rs index 875f5ff8aea69..b53bdf56847b1 100644 --- a/crates/bevy_reflect/src/tuple.rs +++ b/crates/bevy_reflect/src/tuple.rs @@ -369,7 +369,7 @@ pub fn tuple_apply(a: &mut T, b: &dyn Reflect) { /// - `b` is a tuple; /// - `b` has the same number of elements as `a`; /// - [`Reflect::reflect_partial_eq`] returns `Some(true)` for pairwise elements of `a` and `b`. -/// +/// /// Returns [`None`] if the comparison couldn't even be performed. #[inline] pub fn tuple_partial_eq(a: &T, b: &dyn Reflect) -> Option { From 61333cad84c7236d2b28798a660fe1b1002b9c1e Mon Sep 17 00:00:00 2001 From: Afonso Lage Date: Tue, 5 Jul 2022 14:35:55 -0300 Subject: [PATCH 9/9] converted match to if statement for consistency --- crates/bevy_reflect/src/tuple.rs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crates/bevy_reflect/src/tuple.rs b/crates/bevy_reflect/src/tuple.rs index b53bdf56847b1..7651f7f5e32dd 100644 --- a/crates/bevy_reflect/src/tuple.rs +++ b/crates/bevy_reflect/src/tuple.rs @@ -384,9 +384,9 @@ pub fn tuple_partial_eq(a: &T, b: &dyn Reflect) -> Option { } for (a_field, b_field) in a.iter_fields().zip(b.iter_fields()) { - match a_field.reflect_partial_eq(b_field) { - failed @ (Some(false) | None) => return failed, - Some(true) => {} + let eq_result = a_field.reflect_partial_eq(b_field); + if let failed @ (Some(false) | None) = eq_result { + return failed; } }