diff --git a/crates/bevy_reflect/src/array.rs b/crates/bevy_reflect/src/array.rs index 74e0da561d353..93fc0450369e4 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::fmt::Debug; use std::{ any::Any, @@ -145,7 +144,7 @@ unsafe impl Reflect for DynamicArray { } fn serializable(&self) -> Option { - Some(Serializable::Borrowed(self)) + None } } @@ -211,43 +210,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 f8614cdb0078c..a0d167966019b 100644 --- a/crates/bevy_reflect/src/impls/std.rs +++ b/crates/bevy_reflect/src/impls/std.rs @@ -156,7 +156,7 @@ unsafe impl Reflect for Vec { } fn serializable(&self) -> Option { - Some(Serializable::Owned(Box::new(SerializeArrayLike(self)))) + None } } @@ -396,7 +396,7 @@ unsafe impl Reflect for [T; N] { #[inline] fn serializable(&self) -> Option { - Some(Serializable::Owned(Box::new(SerializeArrayLike(self)))) + None } } @@ -414,18 +414,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 a3fabcc5edf30..3ea8d6050f666 100644 --- a/crates/bevy_reflect/src/list.rs +++ b/crates/bevy_reflect/src/list.rs @@ -166,7 +166,7 @@ unsafe impl Reflect for DynamicList { } fn serializable(&self) -> Option { - Some(Serializable::Borrowed(self)) + None } fn debug(&self, f: &mut Formatter<'_>) -> std::fmt::Result { @@ -182,15 +182,6 @@ impl Debug for DynamicList { } } -impl serde::Serialize for DynamicList { - fn serialize(&self, serializer: S) -> Result - where - S: serde::Serializer, - { - crate::array_serialize(self, serializer) - } -} - impl IntoIterator for DynamicList { type Item = Box; type IntoIter = std::vec::IntoIter;