From bccdd1a230ef75f10bbe454f8ff11cad08cd0c8e Mon Sep 17 00:00:00 2001 From: Gino Valente Date: Mon, 21 Nov 2022 14:20:38 -0800 Subject: [PATCH 1/3] Fix binary deserialization not working for unit structs This includes structs with all ignored fields --- crates/bevy_reflect/src/serde/de.rs | 63 ++++++++++++++++++++++++---- crates/bevy_reflect/src/serde/ser.rs | 34 +++++++++++---- 2 files changed, 81 insertions(+), 16 deletions(-) diff --git a/crates/bevy_reflect/src/serde/de.rs b/crates/bevy_reflect/src/serde/de.rs index 4f6c0f31f7517..e1ec8f256ff1d 100644 --- a/crates/bevy_reflect/src/serde/de.rs +++ b/crates/bevy_reflect/src/serde/de.rs @@ -341,6 +341,7 @@ impl<'a, 'de> DeserializeSeed<'de> for TypedReflectDeserializer<'a> { struct_info.field_names(), StructVisitor { struct_info, + registration: self.registration, registry: self.registry, }, )?; @@ -439,6 +440,7 @@ impl<'a, 'de> DeserializeSeed<'de> for TypedReflectDeserializer<'a> { struct StructVisitor<'a> { struct_info: &'static StructInfo, + registration: &'a TypeRegistration, registry: &'a TypeRegistry, } @@ -463,6 +465,18 @@ impl<'a, 'de> Visitor<'de> for StructVisitor<'a> { let mut index = 0usize; let mut output = DynamicStruct::default(); + let ignored_len = self + .registration + .data::() + .map(|data| data.len()) + .unwrap_or(0); + let field_len = self.struct_info.field_len().saturating_sub(ignored_len); + + if field_len == 0 { + // Handle unit structs and ignored fields + return Ok(output); + } + while let Some(value) = seq.next_element_seed(TypedReflectDeserializer { registration: self .struct_info @@ -501,6 +515,21 @@ impl<'a, 'de> Visitor<'de> for TupleStructVisitor<'a> { let mut index = 0usize; let mut tuple_struct = DynamicTupleStruct::default(); + let ignored_len = self + .registration + .data::() + .map(|data| data.len()) + .unwrap_or(0); + let field_len = self + .tuple_struct_info + .field_len() + .saturating_sub(ignored_len); + + if field_len == 0 { + // Handle unit structs and ignored fields + return Ok(tuple_struct); + } + let get_field_registration = |index: usize| -> Result<&'a TypeRegistration, V::Error> { let field = self.tuple_struct_info.field_at(index).ok_or_else(|| { de::Error::custom(format_args!( @@ -1011,6 +1040,8 @@ mod tests { map_value: HashMap, struct_value: SomeStruct, tuple_struct_value: SomeTupleStruct, + unit_struct: SomeUnitStruct, + ignored_struct: SomeIgnoredStruct, unit_enum: SomeEnum, newtype_enum: SomeEnum, tuple_enum: SomeEnum, @@ -1026,6 +1057,12 @@ mod tests { #[derive(Reflect, FromReflect, Debug, PartialEq)] struct SomeTupleStruct(String); + #[derive(Reflect, FromReflect, Debug, PartialEq)] + struct SomeUnitStruct; + + #[derive(Reflect, FromReflect, Debug, PartialEq)] + struct SomeIgnoredStruct(#[reflect(ignore)] i32); + #[derive(Reflect, FromReflect, Debug, PartialEq, Deserialize)] struct SomeDeserializableStruct { foo: i64, @@ -1055,6 +1092,8 @@ mod tests { registry.register::(); registry.register::(); registry.register::(); + registry.register::(); + registry.register::(); registry.register::(); registry.register::(); registry.register::(); @@ -1090,6 +1129,8 @@ mod tests { map_value: map, struct_value: SomeStruct { foo: 999999999 }, tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), + unit_struct: SomeUnitStruct, + ignored_struct: SomeIgnoredStruct(0), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), @@ -1125,6 +1166,8 @@ mod tests { foo: 999999999, ), tuple_struct_value: ("Tuple Struct"), + unit_struct: (), + ignored_struct: (), unit_enum: Unit, newtype_enum: NewType(123), tuple_enum: Tuple(1.23, 3.21), @@ -1337,6 +1380,8 @@ mod tests { map_value: map, struct_value: SomeStruct { foo: 999999999 }, tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), + unit_struct: SomeUnitStruct, + ignored_struct: SomeIgnoredStruct(0), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), @@ -1392,6 +1437,8 @@ mod tests { map_value: map, struct_value: SomeStruct { foo: 999999999 }, tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), + unit_struct: SomeUnitStruct, + ignored_struct: SomeIgnoredStruct(0), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), @@ -1409,14 +1456,14 @@ mod tests { let input = vec![ 129, 217, 40, 98, 101, 118, 121, 95, 114, 101, 102, 108, 101, 99, 116, 58, 58, 115, 101, 114, 100, 101, 58, 58, 100, 101, 58, 58, 116, 101, 115, 116, 115, 58, 58, 77, 121, - 83, 116, 114, 117, 99, 116, 158, 123, 172, 72, 101, 108, 108, 111, 32, 119, 111, 114, - 108, 100, 33, 145, 123, 146, 202, 64, 73, 15, 219, 205, 5, 57, 149, 254, 255, 0, 1, 2, - 149, 254, 255, 0, 1, 2, 129, 64, 32, 145, 206, 59, 154, 201, 255, 145, 172, 84, 117, - 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 164, 85, 110, 105, 116, 129, 167, 78, - 101, 119, 84, 121, 112, 101, 123, 129, 165, 84, 117, 112, 108, 101, 146, 202, 63, 157, - 112, 164, 202, 64, 77, 112, 164, 129, 166, 83, 116, 114, 117, 99, 116, 145, 180, 83, - 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, 118, 97, 108, 117, - 101, 146, 100, 145, 101, + 83, 116, 114, 117, 99, 116, 220, 0, 16, 123, 172, 72, 101, 108, 108, 111, 32, 119, 111, + 114, 108, 100, 33, 145, 123, 146, 202, 64, 73, 15, 219, 205, 5, 57, 149, 254, 255, 0, + 1, 2, 149, 254, 255, 0, 1, 2, 129, 64, 32, 145, 206, 59, 154, 201, 255, 145, 172, 84, + 117, 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 144, 144, 164, 85, 110, 105, 116, + 129, 167, 78, 101, 119, 84, 121, 112, 101, 123, 129, 165, 84, 117, 112, 108, 101, 146, + 202, 63, 157, 112, 164, 202, 64, 77, 112, 164, 129, 166, 83, 116, 114, 117, 99, 116, + 145, 180, 83, 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, 118, 97, + 108, 117, 101, 146, 100, 145, 101, ]; let deserializer = UntypedReflectDeserializer::new(®istry); diff --git a/crates/bevy_reflect/src/serde/ser.rs b/crates/bevy_reflect/src/serde/ser.rs index 1dee7dda46bf5..a475e38280378 100644 --- a/crates/bevy_reflect/src/serde/ser.rs +++ b/crates/bevy_reflect/src/serde/ser.rs @@ -488,6 +488,8 @@ mod tests { map_value: HashMap, struct_value: SomeStruct, tuple_struct_value: SomeTupleStruct, + unit_struct: SomeUnitStruct, + ignored_struct: SomeIgnoredStruct, unit_enum: SomeEnum, newtype_enum: SomeEnum, tuple_enum: SomeEnum, @@ -503,6 +505,12 @@ mod tests { #[derive(Reflect, Debug, PartialEq)] struct SomeTupleStruct(String); + #[derive(Reflect, FromReflect, Debug, PartialEq)] + struct SomeUnitStruct; + + #[derive(Reflect, FromReflect, Debug, PartialEq)] + struct SomeIgnoredStruct(#[reflect(ignore)] i32); + #[derive(Reflect, Debug, PartialEq)] enum SomeEnum { Unit, @@ -532,6 +540,8 @@ mod tests { registry.register::(); registry.register::(); registry.register::(); + registry.register::(); + registry.register::(); registry.register::(); registry.register::(); registry.register::(); @@ -557,6 +567,8 @@ mod tests { map_value: map, struct_value: SomeStruct { foo: 999999999 }, tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), + unit_struct: SomeUnitStruct, + ignored_struct: SomeIgnoredStruct(123), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), @@ -600,6 +612,8 @@ mod tests { foo: 999999999, ), tuple_struct_value: ("Tuple Struct"), + unit_struct: (), + ignored_struct: (), unit_enum: Unit, newtype_enum: NewType(123), tuple_enum: Tuple(1.23, 3.21), @@ -745,6 +759,8 @@ mod tests { map_value: map, struct_value: SomeStruct { foo: 999999999 }, tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), + unit_struct: SomeUnitStruct, + ignored_struct: SomeIgnoredStruct(123), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), @@ -795,6 +811,8 @@ mod tests { map_value: map, struct_value: SomeStruct { foo: 999999999 }, tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), + unit_struct: SomeUnitStruct, + ignored_struct: SomeIgnoredStruct(123), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), @@ -815,14 +833,14 @@ mod tests { let expected: Vec = vec![ 129, 217, 41, 98, 101, 118, 121, 95, 114, 101, 102, 108, 101, 99, 116, 58, 58, 115, 101, 114, 100, 101, 58, 58, 115, 101, 114, 58, 58, 116, 101, 115, 116, 115, 58, 58, 77, - 121, 83, 116, 114, 117, 99, 116, 158, 123, 172, 72, 101, 108, 108, 111, 32, 119, 111, - 114, 108, 100, 33, 145, 123, 146, 202, 64, 73, 15, 219, 205, 5, 57, 149, 254, 255, 0, - 1, 2, 149, 254, 255, 0, 1, 2, 129, 64, 32, 145, 206, 59, 154, 201, 255, 145, 172, 84, - 117, 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 164, 85, 110, 105, 116, 129, 167, - 78, 101, 119, 84, 121, 112, 101, 123, 129, 165, 84, 117, 112, 108, 101, 146, 202, 63, - 157, 112, 164, 202, 64, 77, 112, 164, 129, 166, 83, 116, 114, 117, 99, 116, 145, 180, - 83, 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, 118, 97, 108, 117, - 101, 146, 100, 145, 101, + 121, 83, 116, 114, 117, 99, 116, 220, 0, 16, 123, 172, 72, 101, 108, 108, 111, 32, 119, + 111, 114, 108, 100, 33, 145, 123, 146, 202, 64, 73, 15, 219, 205, 5, 57, 149, 254, 255, + 0, 1, 2, 149, 254, 255, 0, 1, 2, 129, 64, 32, 145, 206, 59, 154, 201, 255, 145, 172, + 84, 117, 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 144, 144, 164, 85, 110, 105, + 116, 129, 167, 78, 101, 119, 84, 121, 112, 101, 123, 129, 165, 84, 117, 112, 108, 101, + 146, 202, 63, 157, 112, 164, 202, 64, 77, 112, 164, 129, 166, 83, 116, 114, 117, 99, + 116, 145, 180, 83, 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, + 118, 97, 108, 117, 101, 146, 100, 145, 101, ]; assert_eq!(expected, bytes); From ad5e047e2bdeeb6fbea55f82b6962e7d981a139a Mon Sep 17 00:00:00 2001 From: Gino Valente Date: Tue, 22 Nov 2022 12:45:55 -0800 Subject: [PATCH 2/3] Fix binary serde of enums with all ignored fields --- crates/bevy_reflect/src/serde/de.rs | 61 +++++++++++++++++++++++----- crates/bevy_reflect/src/serde/ser.rs | 32 ++++++++++----- 2 files changed, 73 insertions(+), 20 deletions(-) diff --git a/crates/bevy_reflect/src/serde/de.rs b/crates/bevy_reflect/src/serde/de.rs index e1ec8f256ff1d..1e2f974e623ec 100644 --- a/crates/bevy_reflect/src/serde/de.rs +++ b/crates/bevy_reflect/src/serde/de.rs @@ -412,6 +412,7 @@ impl<'a, 'de> DeserializeSeed<'de> for TypedReflectDeserializer<'a> { enum_info.variant_names(), EnumVisitor { enum_info, + registration: self.registration, registry: self.registry, }, )? @@ -704,6 +705,7 @@ impl<'a, 'de> Visitor<'de> for MapVisitor<'a> { struct EnumVisitor<'a> { enum_info: &'static EnumInfo, + registration: &'a TypeRegistration, registry: &'a TypeRegistry, } @@ -730,6 +732,7 @@ impl<'a, 'de> Visitor<'de> for EnumVisitor<'a> { struct_info.field_names(), StructVariantVisitor { struct_info, + registration: self.registration, registry: self.registry, }, )? @@ -751,6 +754,7 @@ impl<'a, 'de> Visitor<'de> for EnumVisitor<'a> { tuple_info.field_len(), TupleVariantVisitor { tuple_info, + registration: self.registration, registry: self.registry, }, )? @@ -816,6 +820,7 @@ impl<'de> DeserializeSeed<'de> for VariantDeserializer { struct StructVariantVisitor<'a> { struct_info: &'static StructVariantInfo, + registration: &'a TypeRegistration, registry: &'a TypeRegistry, } @@ -840,6 +845,18 @@ impl<'a, 'de> Visitor<'de> for StructVariantVisitor<'a> { let mut index = 0usize; let mut output = DynamicStruct::default(); + let ignored_len = self + .registration + .data::() + .map(|data| data.len()) + .unwrap_or(0); + let field_len = self.struct_info.field_len().saturating_sub(ignored_len); + + if field_len == 0 { + // Handle all fields being ignored + return Ok(output); + } + while let Some(value) = seq.next_element_seed(TypedReflectDeserializer { registration: self .struct_info @@ -860,6 +877,7 @@ impl<'a, 'de> Visitor<'de> for StructVariantVisitor<'a> { struct TupleVariantVisitor<'a> { tuple_info: &'static TupleVariantInfo, + registration: &'a TypeRegistration, registry: &'a TypeRegistry, } @@ -874,6 +892,18 @@ impl<'a, 'de> Visitor<'de> for TupleVariantVisitor<'a> { where V: SeqAccess<'de>, { + let ignored_len = self + .registration + .data::() + .map(|data| data.len()) + .unwrap_or(0); + let field_len = self.tuple_info.field_len().saturating_sub(ignored_len); + + if field_len == 0 { + // Handle all fields being ignored + return Ok(DynamicTuple::default()); + } + visit_tuple(&mut seq, self.tuple_info, self.registry) } } @@ -1042,6 +1072,7 @@ mod tests { tuple_struct_value: SomeTupleStruct, unit_struct: SomeUnitStruct, ignored_struct: SomeIgnoredStruct, + ignored_enum: SomeIgnoredEnum, unit_enum: SomeEnum, newtype_enum: SomeEnum, tuple_enum: SomeEnum, @@ -1087,6 +1118,11 @@ mod tests { Struct { foo: String }, } + #[derive(Reflect, FromReflect, Debug, PartialEq)] + enum SomeIgnoredEnum { + Ignored(#[reflect(ignore)] f32, #[reflect(ignore)] f32), + } + fn get_registry() -> TypeRegistry { let mut registry = TypeRegistry::default(); registry.register::(); @@ -1097,6 +1133,7 @@ mod tests { registry.register::(); registry.register::(); registry.register::(); + registry.register::(); registry.register::(); registry.register::(); registry.register::(); @@ -1131,6 +1168,7 @@ mod tests { tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), unit_struct: SomeUnitStruct, ignored_struct: SomeIgnoredStruct(0), + ignored_enum: SomeIgnoredEnum::Ignored(0.0, 0.0), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), @@ -1168,6 +1206,7 @@ mod tests { tuple_struct_value: ("Tuple Struct"), unit_struct: (), ignored_struct: (), + ignored_enum: Ignored(), unit_enum: Unit, newtype_enum: NewType(123), tuple_enum: Tuple(1.23, 3.21), @@ -1382,6 +1421,7 @@ mod tests { tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), unit_struct: SomeUnitStruct, ignored_struct: SomeIgnoredStruct(0), + ignored_enum: SomeIgnoredEnum::Ignored(0.0, 0.0), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), @@ -1405,10 +1445,10 @@ mod tests { 255, 255, 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 254, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 32, 0, 0, 0, 0, 0, 0, 0, 255, 201, 154, 59, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 84, 117, 112, - 108, 101, 32, 83, 116, 114, 117, 99, 116, 0, 0, 0, 0, 1, 0, 0, 0, 123, 0, 0, 0, 0, 0, - 0, 0, 2, 0, 0, 0, 164, 112, 157, 63, 164, 112, 77, 64, 3, 0, 0, 0, 20, 0, 0, 0, 0, 0, - 0, 0, 83, 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, 118, 97, - 108, 117, 101, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, + 108, 101, 32, 83, 116, 114, 117, 99, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 123, 0, + 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 164, 112, 157, 63, 164, 112, 77, 64, 3, 0, 0, 0, 20, 0, + 0, 0, 0, 0, 0, 0, 83, 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, + 118, 97, 108, 117, 101, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, ]; let deserializer = UntypedReflectDeserializer::new(®istry); @@ -1439,6 +1479,7 @@ mod tests { tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), unit_struct: SomeUnitStruct, ignored_struct: SomeIgnoredStruct(0), + ignored_enum: SomeIgnoredEnum::Ignored(0.0, 0.0), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), @@ -1456,14 +1497,14 @@ mod tests { let input = vec![ 129, 217, 40, 98, 101, 118, 121, 95, 114, 101, 102, 108, 101, 99, 116, 58, 58, 115, 101, 114, 100, 101, 58, 58, 100, 101, 58, 58, 116, 101, 115, 116, 115, 58, 58, 77, 121, - 83, 116, 114, 117, 99, 116, 220, 0, 16, 123, 172, 72, 101, 108, 108, 111, 32, 119, 111, + 83, 116, 114, 117, 99, 116, 220, 0, 17, 123, 172, 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33, 145, 123, 146, 202, 64, 73, 15, 219, 205, 5, 57, 149, 254, 255, 0, 1, 2, 149, 254, 255, 0, 1, 2, 129, 64, 32, 145, 206, 59, 154, 201, 255, 145, 172, 84, - 117, 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 144, 144, 164, 85, 110, 105, 116, - 129, 167, 78, 101, 119, 84, 121, 112, 101, 123, 129, 165, 84, 117, 112, 108, 101, 146, - 202, 63, 157, 112, 164, 202, 64, 77, 112, 164, 129, 166, 83, 116, 114, 117, 99, 116, - 145, 180, 83, 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, 118, 97, - 108, 117, 101, 146, 100, 145, 101, + 117, 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 144, 144, 129, 167, 73, 103, 110, + 111, 114, 101, 100, 144, 164, 85, 110, 105, 116, 129, 167, 78, 101, 119, 84, 121, 112, + 101, 123, 129, 165, 84, 117, 112, 108, 101, 146, 202, 63, 157, 112, 164, 202, 64, 77, + 112, 164, 129, 166, 83, 116, 114, 117, 99, 116, 145, 180, 83, 116, 114, 117, 99, 116, + 32, 118, 97, 114, 105, 97, 110, 116, 32, 118, 97, 108, 117, 101, 146, 100, 145, 101, ]; let deserializer = UntypedReflectDeserializer::new(®istry); diff --git a/crates/bevy_reflect/src/serde/ser.rs b/crates/bevy_reflect/src/serde/ser.rs index a475e38280378..2b0e8b3141320 100644 --- a/crates/bevy_reflect/src/serde/ser.rs +++ b/crates/bevy_reflect/src/serde/ser.rs @@ -490,6 +490,7 @@ mod tests { tuple_struct_value: SomeTupleStruct, unit_struct: SomeUnitStruct, ignored_struct: SomeIgnoredStruct, + ignored_enum: SomeIgnoredEnum, unit_enum: SomeEnum, newtype_enum: SomeEnum, tuple_enum: SomeEnum, @@ -519,6 +520,11 @@ mod tests { Struct { foo: String }, } + #[derive(Reflect, FromReflect, Debug, PartialEq)] + enum SomeIgnoredEnum { + Ignored(#[reflect(ignore)] f32, #[reflect(ignore)] f32), + } + #[derive(Reflect, Debug, PartialEq, Serialize)] struct SomeSerializableStruct { foo: i64, @@ -542,6 +548,7 @@ mod tests { registry.register::(); registry.register::(); registry.register::(); + registry.register::(); registry.register::(); registry.register::(); registry.register::(); @@ -569,6 +576,7 @@ mod tests { tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), unit_struct: SomeUnitStruct, ignored_struct: SomeIgnoredStruct(123), + ignored_enum: SomeIgnoredEnum::Ignored(1.23, 3.45), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), @@ -614,6 +622,7 @@ mod tests { tuple_struct_value: ("Tuple Struct"), unit_struct: (), ignored_struct: (), + ignored_enum: Ignored(), unit_enum: Unit, newtype_enum: NewType(123), tuple_enum: Tuple(1.23, 3.21), @@ -761,6 +770,7 @@ mod tests { tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), unit_struct: SomeUnitStruct, ignored_struct: SomeIgnoredStruct(123), + ignored_enum: SomeIgnoredEnum::Ignored(1.23, 3.45), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), @@ -787,10 +797,10 @@ mod tests { 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 254, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 32, 0, 0, 0, 0, 0, 0, 0, 255, 201, 154, 59, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 84, 117, - 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 0, 0, 0, 0, 1, 0, 0, 0, 123, 0, 0, 0, 0, - 0, 0, 0, 2, 0, 0, 0, 164, 112, 157, 63, 164, 112, 77, 64, 3, 0, 0, 0, 20, 0, 0, 0, 0, - 0, 0, 0, 83, 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, 118, 97, - 108, 117, 101, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, + 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 123, + 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 164, 112, 157, 63, 164, 112, 77, 64, 3, 0, 0, 0, 20, + 0, 0, 0, 0, 0, 0, 0, 83, 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, + 32, 118, 97, 108, 117, 101, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, ]; assert_eq!(expected, bytes); @@ -813,6 +823,7 @@ mod tests { tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), unit_struct: SomeUnitStruct, ignored_struct: SomeIgnoredStruct(123), + ignored_enum: SomeIgnoredEnum::Ignored(1.23, 3.45), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), @@ -833,14 +844,15 @@ mod tests { let expected: Vec = vec![ 129, 217, 41, 98, 101, 118, 121, 95, 114, 101, 102, 108, 101, 99, 116, 58, 58, 115, 101, 114, 100, 101, 58, 58, 115, 101, 114, 58, 58, 116, 101, 115, 116, 115, 58, 58, 77, - 121, 83, 116, 114, 117, 99, 116, 220, 0, 16, 123, 172, 72, 101, 108, 108, 111, 32, 119, + 121, 83, 116, 114, 117, 99, 116, 220, 0, 17, 123, 172, 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33, 145, 123, 146, 202, 64, 73, 15, 219, 205, 5, 57, 149, 254, 255, 0, 1, 2, 149, 254, 255, 0, 1, 2, 129, 64, 32, 145, 206, 59, 154, 201, 255, 145, 172, - 84, 117, 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 144, 144, 164, 85, 110, 105, - 116, 129, 167, 78, 101, 119, 84, 121, 112, 101, 123, 129, 165, 84, 117, 112, 108, 101, - 146, 202, 63, 157, 112, 164, 202, 64, 77, 112, 164, 129, 166, 83, 116, 114, 117, 99, - 116, 145, 180, 83, 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, - 118, 97, 108, 117, 101, 146, 100, 145, 101, + 84, 117, 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 144, 144, 129, 167, 73, 103, + 110, 111, 114, 101, 100, 144, 164, 85, 110, 105, 116, 129, 167, 78, 101, 119, 84, 121, + 112, 101, 123, 129, 165, 84, 117, 112, 108, 101, 146, 202, 63, 157, 112, 164, 202, 64, + 77, 112, 164, 129, 166, 83, 116, 114, 117, 99, 116, 145, 180, 83, 116, 114, 117, 99, + 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, 118, 97, 108, 117, 101, 146, 100, 145, + 101, ]; assert_eq!(expected, bytes); From bda115b9d7d784c7df43bd2b69de0297ecbeffd9 Mon Sep 17 00:00:00 2001 From: Gino Valente Date: Tue, 22 Nov 2022 13:03:32 -0800 Subject: [PATCH 3/3] Improve serde tests for ignored fields --- crates/bevy_reflect/src/serde/de.rs | 73 ++++++++++++++++++--------- crates/bevy_reflect/src/serde/ser.rs | 74 +++++++++++++++++++--------- 2 files changed, 102 insertions(+), 45 deletions(-) diff --git a/crates/bevy_reflect/src/serde/de.rs b/crates/bevy_reflect/src/serde/de.rs index 1e2f974e623ec..656d4b3f55ba8 100644 --- a/crates/bevy_reflect/src/serde/de.rs +++ b/crates/bevy_reflect/src/serde/de.rs @@ -1071,12 +1071,14 @@ mod tests { struct_value: SomeStruct, tuple_struct_value: SomeTupleStruct, unit_struct: SomeUnitStruct, - ignored_struct: SomeIgnoredStruct, - ignored_enum: SomeIgnoredEnum, unit_enum: SomeEnum, newtype_enum: SomeEnum, tuple_enum: SomeEnum, struct_enum: SomeEnum, + ignored_struct: SomeIgnoredStruct, + ignored_tuple_struct: SomeIgnoredTupleStruct, + ignored_struct_variant: SomeIgnoredEnum, + ignored_tuple_variant: SomeIgnoredEnum, custom_deserialize: CustomDeserialize, } @@ -1092,7 +1094,13 @@ mod tests { struct SomeUnitStruct; #[derive(Reflect, FromReflect, Debug, PartialEq)] - struct SomeIgnoredStruct(#[reflect(ignore)] i32); + struct SomeIgnoredStruct { + #[reflect(ignore)] + ignored: i32, + } + + #[derive(Reflect, FromReflect, Debug, PartialEq)] + struct SomeIgnoredTupleStruct(#[reflect(ignore)] i32); #[derive(Reflect, FromReflect, Debug, PartialEq, Deserialize)] struct SomeDeserializableStruct { @@ -1120,7 +1128,11 @@ mod tests { #[derive(Reflect, FromReflect, Debug, PartialEq)] enum SomeIgnoredEnum { - Ignored(#[reflect(ignore)] f32, #[reflect(ignore)] f32), + Tuple(#[reflect(ignore)] f32, #[reflect(ignore)] f32), + Struct { + #[reflect(ignore)] + foo: String, + }, } fn get_registry() -> TypeRegistry { @@ -1130,6 +1142,7 @@ mod tests { registry.register::(); registry.register::(); registry.register::(); + registry.register::(); registry.register::(); registry.register::(); registry.register::(); @@ -1167,14 +1180,18 @@ mod tests { struct_value: SomeStruct { foo: 999999999 }, tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), unit_struct: SomeUnitStruct, - ignored_struct: SomeIgnoredStruct(0), - ignored_enum: SomeIgnoredEnum::Ignored(0.0, 0.0), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), struct_enum: SomeEnum::Struct { foo: String::from("Struct variant value"), }, + ignored_struct: SomeIgnoredStruct { ignored: 0 }, + ignored_tuple_struct: SomeIgnoredTupleStruct(0), + ignored_struct_variant: SomeIgnoredEnum::Struct { + foo: String::default(), + }, + ignored_tuple_variant: SomeIgnoredEnum::Tuple(0.0, 0.0), custom_deserialize: CustomDeserialize { value: 100, inner_struct: SomeDeserializableStruct { foo: 101 }, @@ -1205,14 +1222,16 @@ mod tests { ), tuple_struct_value: ("Tuple Struct"), unit_struct: (), - ignored_struct: (), - ignored_enum: Ignored(), unit_enum: Unit, newtype_enum: NewType(123), tuple_enum: Tuple(1.23, 3.21), struct_enum: Struct( foo: "Struct variant value", ), + ignored_struct: (), + ignored_tuple_struct: (), + ignored_struct_variant: Struct(), + ignored_tuple_variant: Tuple(), custom_deserialize: ( value: 100, renamed: ( @@ -1420,14 +1439,18 @@ mod tests { struct_value: SomeStruct { foo: 999999999 }, tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), unit_struct: SomeUnitStruct, - ignored_struct: SomeIgnoredStruct(0), - ignored_enum: SomeIgnoredEnum::Ignored(0.0, 0.0), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), struct_enum: SomeEnum::Struct { foo: String::from("Struct variant value"), }, + ignored_struct: SomeIgnoredStruct { ignored: 0 }, + ignored_tuple_struct: SomeIgnoredTupleStruct(0), + ignored_struct_variant: SomeIgnoredEnum::Struct { + foo: String::default(), + }, + ignored_tuple_variant: SomeIgnoredEnum::Tuple(0.0, 0.0), custom_deserialize: CustomDeserialize { value: 100, inner_struct: SomeDeserializableStruct { foo: 101 }, @@ -1445,10 +1468,11 @@ mod tests { 255, 255, 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 254, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 32, 0, 0, 0, 0, 0, 0, 0, 255, 201, 154, 59, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 84, 117, 112, - 108, 101, 32, 83, 116, 114, 117, 99, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 123, 0, - 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 164, 112, 157, 63, 164, 112, 77, 64, 3, 0, 0, 0, 20, 0, - 0, 0, 0, 0, 0, 0, 83, 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, - 118, 97, 108, 117, 101, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, + 108, 101, 32, 83, 116, 114, 117, 99, 116, 0, 0, 0, 0, 1, 0, 0, 0, 123, 0, 0, 0, 0, 0, + 0, 0, 2, 0, 0, 0, 164, 112, 157, 63, 164, 112, 77, 64, 3, 0, 0, 0, 20, 0, 0, 0, 0, 0, + 0, 0, 83, 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, 118, 97, + 108, 117, 101, 1, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, + 0, ]; let deserializer = UntypedReflectDeserializer::new(®istry); @@ -1478,14 +1502,18 @@ mod tests { struct_value: SomeStruct { foo: 999999999 }, tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), unit_struct: SomeUnitStruct, - ignored_struct: SomeIgnoredStruct(0), - ignored_enum: SomeIgnoredEnum::Ignored(0.0, 0.0), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), struct_enum: SomeEnum::Struct { foo: String::from("Struct variant value"), }, + ignored_struct: SomeIgnoredStruct { ignored: 0 }, + ignored_tuple_struct: SomeIgnoredTupleStruct(0), + ignored_struct_variant: SomeIgnoredEnum::Struct { + foo: String::default(), + }, + ignored_tuple_variant: SomeIgnoredEnum::Tuple(0.0, 0.0), custom_deserialize: CustomDeserialize { value: 100, inner_struct: SomeDeserializableStruct { foo: 101 }, @@ -1497,14 +1525,15 @@ mod tests { let input = vec![ 129, 217, 40, 98, 101, 118, 121, 95, 114, 101, 102, 108, 101, 99, 116, 58, 58, 115, 101, 114, 100, 101, 58, 58, 100, 101, 58, 58, 116, 101, 115, 116, 115, 58, 58, 77, 121, - 83, 116, 114, 117, 99, 116, 220, 0, 17, 123, 172, 72, 101, 108, 108, 111, 32, 119, 111, + 83, 116, 114, 117, 99, 116, 220, 0, 19, 123, 172, 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33, 145, 123, 146, 202, 64, 73, 15, 219, 205, 5, 57, 149, 254, 255, 0, 1, 2, 149, 254, 255, 0, 1, 2, 129, 64, 32, 145, 206, 59, 154, 201, 255, 145, 172, 84, - 117, 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 144, 144, 129, 167, 73, 103, 110, - 111, 114, 101, 100, 144, 164, 85, 110, 105, 116, 129, 167, 78, 101, 119, 84, 121, 112, - 101, 123, 129, 165, 84, 117, 112, 108, 101, 146, 202, 63, 157, 112, 164, 202, 64, 77, - 112, 164, 129, 166, 83, 116, 114, 117, 99, 116, 145, 180, 83, 116, 114, 117, 99, 116, - 32, 118, 97, 114, 105, 97, 110, 116, 32, 118, 97, 108, 117, 101, 146, 100, 145, 101, + 117, 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 144, 164, 85, 110, 105, 116, 129, + 167, 78, 101, 119, 84, 121, 112, 101, 123, 129, 165, 84, 117, 112, 108, 101, 146, 202, + 63, 157, 112, 164, 202, 64, 77, 112, 164, 129, 166, 83, 116, 114, 117, 99, 116, 145, + 180, 83, 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, 118, 97, 108, + 117, 101, 144, 144, 129, 166, 83, 116, 114, 117, 99, 116, 144, 129, 165, 84, 117, 112, + 108, 101, 144, 146, 100, 145, 101, ]; let deserializer = UntypedReflectDeserializer::new(®istry); diff --git a/crates/bevy_reflect/src/serde/ser.rs b/crates/bevy_reflect/src/serde/ser.rs index 2b0e8b3141320..6403b5e99933f 100644 --- a/crates/bevy_reflect/src/serde/ser.rs +++ b/crates/bevy_reflect/src/serde/ser.rs @@ -489,12 +489,14 @@ mod tests { struct_value: SomeStruct, tuple_struct_value: SomeTupleStruct, unit_struct: SomeUnitStruct, - ignored_struct: SomeIgnoredStruct, - ignored_enum: SomeIgnoredEnum, unit_enum: SomeEnum, newtype_enum: SomeEnum, tuple_enum: SomeEnum, struct_enum: SomeEnum, + ignored_struct: SomeIgnoredStruct, + ignored_tuple_struct: SomeIgnoredTupleStruct, + ignored_struct_variant: SomeIgnoredEnum, + ignored_tuple_variant: SomeIgnoredEnum, custom_serialize: CustomSerialize, } @@ -510,7 +512,13 @@ mod tests { struct SomeUnitStruct; #[derive(Reflect, FromReflect, Debug, PartialEq)] - struct SomeIgnoredStruct(#[reflect(ignore)] i32); + struct SomeIgnoredStruct { + #[reflect(ignore)] + ignored: i32, + } + + #[derive(Reflect, FromReflect, Debug, PartialEq)] + struct SomeIgnoredTupleStruct(#[reflect(ignore)] i32); #[derive(Reflect, Debug, PartialEq)] enum SomeEnum { @@ -522,7 +530,11 @@ mod tests { #[derive(Reflect, FromReflect, Debug, PartialEq)] enum SomeIgnoredEnum { - Ignored(#[reflect(ignore)] f32, #[reflect(ignore)] f32), + Tuple(#[reflect(ignore)] f32, #[reflect(ignore)] f32), + Struct { + #[reflect(ignore)] + foo: String, + }, } #[derive(Reflect, Debug, PartialEq, Serialize)] @@ -548,6 +560,7 @@ mod tests { registry.register::(); registry.register::(); registry.register::(); + registry.register::(); registry.register::(); registry.register::(); registry.register::(); @@ -575,14 +588,18 @@ mod tests { struct_value: SomeStruct { foo: 999999999 }, tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), unit_struct: SomeUnitStruct, - ignored_struct: SomeIgnoredStruct(123), - ignored_enum: SomeIgnoredEnum::Ignored(1.23, 3.45), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), struct_enum: SomeEnum::Struct { foo: String::from("Struct variant value"), }, + ignored_struct: SomeIgnoredStruct { ignored: 123 }, + ignored_tuple_struct: SomeIgnoredTupleStruct(123), + ignored_struct_variant: SomeIgnoredEnum::Struct { + foo: String::from("Struct Variant"), + }, + ignored_tuple_variant: SomeIgnoredEnum::Tuple(1.23, 3.45), custom_serialize: CustomSerialize { value: 100, inner_struct: SomeSerializableStruct { foo: 101 }, @@ -621,14 +638,16 @@ mod tests { ), tuple_struct_value: ("Tuple Struct"), unit_struct: (), - ignored_struct: (), - ignored_enum: Ignored(), unit_enum: Unit, newtype_enum: NewType(123), tuple_enum: Tuple(1.23, 3.21), struct_enum: Struct( foo: "Struct variant value", ), + ignored_struct: (), + ignored_tuple_struct: (), + ignored_struct_variant: Struct(), + ignored_tuple_variant: Tuple(), custom_serialize: ( value: 100, renamed: ( @@ -769,14 +788,18 @@ mod tests { struct_value: SomeStruct { foo: 999999999 }, tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), unit_struct: SomeUnitStruct, - ignored_struct: SomeIgnoredStruct(123), - ignored_enum: SomeIgnoredEnum::Ignored(1.23, 3.45), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), struct_enum: SomeEnum::Struct { foo: String::from("Struct variant value"), }, + ignored_struct: SomeIgnoredStruct { ignored: 123 }, + ignored_tuple_struct: SomeIgnoredTupleStruct(123), + ignored_struct_variant: SomeIgnoredEnum::Struct { + foo: String::from("Struct Variant"), + }, + ignored_tuple_variant: SomeIgnoredEnum::Tuple(1.23, 3.45), custom_serialize: CustomSerialize { value: 100, inner_struct: SomeSerializableStruct { foo: 101 }, @@ -797,10 +820,11 @@ mod tests { 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 254, 255, 255, 255, 255, 255, 255, 255, 0, 0, 0, 0, 1, 0, 0, 0, 2, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 64, 32, 0, 0, 0, 0, 0, 0, 0, 255, 201, 154, 59, 0, 0, 0, 0, 12, 0, 0, 0, 0, 0, 0, 0, 84, 117, - 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 123, - 0, 0, 0, 0, 0, 0, 0, 2, 0, 0, 0, 164, 112, 157, 63, 164, 112, 77, 64, 3, 0, 0, 0, 20, - 0, 0, 0, 0, 0, 0, 0, 83, 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, - 32, 118, 97, 108, 117, 101, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, 0, + 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 0, 0, 0, 0, 1, 0, 0, 0, 123, 0, 0, 0, 0, + 0, 0, 0, 2, 0, 0, 0, 164, 112, 157, 63, 164, 112, 77, 64, 3, 0, 0, 0, 20, 0, 0, 0, 0, + 0, 0, 0, 83, 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, 118, 97, + 108, 117, 101, 1, 0, 0, 0, 0, 0, 0, 0, 100, 0, 0, 0, 0, 0, 0, 0, 101, 0, 0, 0, 0, 0, 0, + 0, ]; assert_eq!(expected, bytes); @@ -822,14 +846,18 @@ mod tests { struct_value: SomeStruct { foo: 999999999 }, tuple_struct_value: SomeTupleStruct(String::from("Tuple Struct")), unit_struct: SomeUnitStruct, - ignored_struct: SomeIgnoredStruct(123), - ignored_enum: SomeIgnoredEnum::Ignored(1.23, 3.45), unit_enum: SomeEnum::Unit, newtype_enum: SomeEnum::NewType(123), tuple_enum: SomeEnum::Tuple(1.23, 3.21), struct_enum: SomeEnum::Struct { foo: String::from("Struct variant value"), }, + ignored_struct: SomeIgnoredStruct { ignored: 123 }, + ignored_tuple_struct: SomeIgnoredTupleStruct(123), + ignored_struct_variant: SomeIgnoredEnum::Struct { + foo: String::from("Struct Variant"), + }, + ignored_tuple_variant: SomeIgnoredEnum::Tuple(1.23, 3.45), custom_serialize: CustomSerialize { value: 100, inner_struct: SomeSerializableStruct { foo: 101 }, @@ -844,15 +872,15 @@ mod tests { let expected: Vec = vec![ 129, 217, 41, 98, 101, 118, 121, 95, 114, 101, 102, 108, 101, 99, 116, 58, 58, 115, 101, 114, 100, 101, 58, 58, 115, 101, 114, 58, 58, 116, 101, 115, 116, 115, 58, 58, 77, - 121, 83, 116, 114, 117, 99, 116, 220, 0, 17, 123, 172, 72, 101, 108, 108, 111, 32, 119, + 121, 83, 116, 114, 117, 99, 116, 220, 0, 19, 123, 172, 72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33, 145, 123, 146, 202, 64, 73, 15, 219, 205, 5, 57, 149, 254, 255, 0, 1, 2, 149, 254, 255, 0, 1, 2, 129, 64, 32, 145, 206, 59, 154, 201, 255, 145, 172, - 84, 117, 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 144, 144, 129, 167, 73, 103, - 110, 111, 114, 101, 100, 144, 164, 85, 110, 105, 116, 129, 167, 78, 101, 119, 84, 121, - 112, 101, 123, 129, 165, 84, 117, 112, 108, 101, 146, 202, 63, 157, 112, 164, 202, 64, - 77, 112, 164, 129, 166, 83, 116, 114, 117, 99, 116, 145, 180, 83, 116, 114, 117, 99, - 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, 118, 97, 108, 117, 101, 146, 100, 145, - 101, + 84, 117, 112, 108, 101, 32, 83, 116, 114, 117, 99, 116, 144, 164, 85, 110, 105, 116, + 129, 167, 78, 101, 119, 84, 121, 112, 101, 123, 129, 165, 84, 117, 112, 108, 101, 146, + 202, 63, 157, 112, 164, 202, 64, 77, 112, 164, 129, 166, 83, 116, 114, 117, 99, 116, + 145, 180, 83, 116, 114, 117, 99, 116, 32, 118, 97, 114, 105, 97, 110, 116, 32, 118, 97, + 108, 117, 101, 144, 144, 129, 166, 83, 116, 114, 117, 99, 116, 144, 129, 165, 84, 117, + 112, 108, 101, 144, 146, 100, 145, 101, ]; assert_eq!(expected, bytes);