From 55b37cc381f832ee842e3d0a5c177db9b2e19498 Mon Sep 17 00:00:00 2001 From: Evan Almloff Date: Wed, 24 Jan 2024 10:54:17 -0600 Subject: [PATCH] fix serializing signals --- packages/signals/src/read_only_signal.rs | 20 ++++++++++++++++++++ packages/signals/src/rt.rs | 6 +++--- packages/signals/src/signal.rs | 10 ++++++---- 3 files changed, 29 insertions(+), 7 deletions(-) diff --git a/packages/signals/src/read_only_signal.rs b/packages/signals/src/read_only_signal.rs index 156f6ef33..5103cedcf 100644 --- a/packages/signals/src/read_only_signal.rs +++ b/packages/signals/src/read_only_signal.rs @@ -15,6 +15,26 @@ impl>> From> for ReadOnlySigna } } +#[cfg(feature = "serde")] +impl>> serde::Serialize + for ReadOnlySignal +{ + fn serialize(&self, serializer: S) -> Result { + self.read().serialize(serializer) + } +} + +#[cfg(feature = "serde")] +impl<'de, T: serde::Deserialize<'de> + 'static, Store: Storage>> + serde::Deserialize<'de> for ReadOnlySignal +{ + fn deserialize>(deserializer: D) -> Result { + Ok(Self::new_maybe_sync(Signal::new_maybe_sync( + T::deserialize(deserializer)?, + ))) + } +} + impl ReadOnlySignal { /// Create a new read-only signal. #[track_caller] diff --git a/packages/signals/src/rt.rs b/packages/signals/src/rt.rs index 00f1a7ba9..fe5b6c105 100644 --- a/packages/signals/src/rt.rs +++ b/packages/signals/src/rt.rs @@ -50,7 +50,7 @@ pub struct CopyValue = UnsyncStorage> { } #[cfg(feature = "serde")] -impl serde::Serialize for CopyValue +impl> serde::Serialize for CopyValue where T: serde::Serialize, { @@ -60,14 +60,14 @@ where } #[cfg(feature = "serde")] -impl<'de, T: 'static> serde::Deserialize<'de> for CopyValue +impl<'de, T: 'static, Store: Storage> serde::Deserialize<'de> for CopyValue where T: serde::Deserialize<'de>, { fn deserialize>(deserializer: D) -> Result { let value = T::deserialize(deserializer)?; - Ok(Self::new(value)) + Ok(Self::new_maybe_sync(value)) } } diff --git a/packages/signals/src/signal.rs b/packages/signals/src/signal.rs index 845bef847..94e95b13b 100644 --- a/packages/signals/src/signal.rs +++ b/packages/signals/src/signal.rs @@ -199,18 +199,20 @@ pub struct Signal> = UnsyncStorage> { pub type SyncSignal = Signal; #[cfg(feature = "serde")] -impl>> serde::Serialize for Signal { +impl>> serde::Serialize + for Signal +{ fn serialize(&self, serializer: S) -> Result { self.read().serialize(serializer) } } #[cfg(feature = "serde")] -impl<'de, T: serde::Deserialize<'de> + 'static, S: Storage>> serde::Deserialize<'de> - for Signal +impl<'de, T: serde::Deserialize<'de> + 'static, Store: Storage>> + serde::Deserialize<'de> for Signal { fn deserialize>(deserializer: D) -> Result { - Ok(Self::new(T::deserialize(deserializer)?)) + Ok(Self::new_maybe_sync(T::deserialize(deserializer)?)) } }