Dynamic<T>/Owned<T> serde support

This commit is contained in:
Jonathan Johnson 2024-09-13 15:55:44 -07:00
parent 20ab1ad029
commit 7fc902a5a2
No known key found for this signature in database
GPG key ID: A66D6A34D6620579

View file

@ -855,6 +855,32 @@ where
}
}
#[cfg(feature = "serde")]
impl<T> serde::Serialize for Owned<T>
where
T: serde::Serialize,
{
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.map_ref(|this| this.serialize(serializer))
}
}
#[cfg(feature = "serde")]
impl<'de, T> serde::Deserialize<'de> for Owned<T>
where
T: serde::Deserialize<'de>,
{
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
T::deserialize(deserializer).map(Self::new)
}
}
/// A read-only reference to the value in an [`Owned`].
pub struct OwnedRef<'a, T>(Ref<'a, GenerationalValue<T>>)
where
@ -1277,6 +1303,32 @@ impl<T> Dynamic<T> {
}
}
#[cfg(feature = "serde")]
impl<T> serde::Serialize for Dynamic<T>
where
T: serde::Serialize,
{
fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
where
S: serde::Serializer,
{
self.map_ref(|this| this.serialize(serializer))
}
}
#[cfg(feature = "serde")]
impl<'de, T> serde::Deserialize<'de> for Dynamic<T>
where
T: serde::Deserialize<'de>,
{
fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
where
D: serde::Deserializer<'de>,
{
T::deserialize(deserializer).map(Self::new)
}
}
/// An error returned from [`Dynamic::try_compare_swap`].
#[derive(Debug, Clone, Eq, PartialEq)]
pub enum TryCompareSwapError<T> {