From 481977b1f09c5229240dc585c84042aea84038ad Mon Sep 17 00:00:00 2001 From: Jakob Hellermann Date: Tue, 17 May 2022 10:04:17 +0200 Subject: [PATCH] remove Serialize impl for dyn Array and friends --- crates/bevy_reflect/src/array.rs | 40 +--------------------------- crates/bevy_reflect/src/impls/std.rs | 16 ++--------- crates/bevy_reflect/src/list.rs | 11 +------- 3 files changed, 4 insertions(+), 63 deletions(-) diff --git a/crates/bevy_reflect/src/array.rs b/crates/bevy_reflect/src/array.rs index 0bbcf271272af..2a5d45595d64b 100644 --- a/crates/bevy_reflect/src/array.rs +++ b/crates/bevy_reflect/src/array.rs @@ -1,5 +1,4 @@ use crate::{serde::Serializable, Reflect, ReflectMut, ReflectRef}; -use serde::ser::SerializeSeq; use std::{ any::Any, hash::{Hash, Hasher}, @@ -144,7 +143,7 @@ unsafe impl Reflect for DynamicArray { } fn serializable(&self) -> Option { - Some(Serializable::Borrowed(self)) + None } } @@ -210,43 +209,6 @@ impl<'a> Iterator for ArrayIter<'a> { impl<'a> ExactSizeIterator for ArrayIter<'a> {} -impl serde::Serialize for dyn Array { - fn serialize(&self, serializer: S) -> Result - where - S: serde::Serializer, - { - array_serialize(self, serializer) - } -} - -impl serde::Serialize for DynamicArray { - fn serialize(&self, serializer: S) -> Result - where - S: serde::Serializer, - { - array_serialize(self, serializer) - } -} - -/// Serializes the given [array](Array). -#[inline] -pub fn array_serialize(array: &A, serializer: S) -> Result -where - S: serde::Serializer, -{ - let mut seq = serializer.serialize_seq(Some(array.len()))?; - for element in array.iter() { - let serializable = element.serializable().ok_or_else(|| { - serde::ser::Error::custom(format!( - "Type '{}' does not support `Reflect` serialization", - element.type_name() - )) - })?; - seq.serialize_element(serializable.borrow())?; - } - seq.end() -} - /// Returns the `u64` hash of the given [array](Array). #[inline] pub fn array_hash(array: &A) -> Option { diff --git a/crates/bevy_reflect/src/impls/std.rs b/crates/bevy_reflect/src/impls/std.rs index f678627c4a410..91c0d44af77f9 100644 --- a/crates/bevy_reflect/src/impls/std.rs +++ b/crates/bevy_reflect/src/impls/std.rs @@ -154,7 +154,7 @@ unsafe impl Reflect for Vec { } fn serializable(&self) -> Option { - Some(Serializable::Owned(Box::new(SerializeArrayLike(self)))) + None } } @@ -402,7 +402,7 @@ unsafe impl Reflect for [T; N] { #[inline] fn serializable(&self) -> Option { - Some(Serializable::Owned(Box::new(SerializeArrayLike(self)))) + None } } @@ -420,18 +420,6 @@ impl FromReflect for [T; N] { } } -// Supports dynamic serialization for types that implement `Array`. -struct SerializeArrayLike<'a>(&'a dyn Array); - -impl<'a> serde::Serialize for SerializeArrayLike<'a> { - fn serialize(&self, serializer: S) -> Result - where - S: serde::Serializer, - { - crate::array_serialize(self.0, serializer) - } -} - // TODO: // `FromType::from_type` requires `Deserialize<'de>` to be implemented for `T`. // Currently serde only supports `Deserialize<'de>` for arrays up to size 32. diff --git a/crates/bevy_reflect/src/list.rs b/crates/bevy_reflect/src/list.rs index f2927556eadd3..189a6c9056575 100644 --- a/crates/bevy_reflect/src/list.rs +++ b/crates/bevy_reflect/src/list.rs @@ -165,16 +165,7 @@ unsafe impl Reflect for DynamicList { } fn serializable(&self) -> Option { - Some(Serializable::Borrowed(self)) - } -} - -impl serde::Serialize for DynamicList { - fn serialize(&self, serializer: S) -> Result - where - S: serde::Serializer, - { - crate::array_serialize(self, serializer) + None } }