From dcc97f8ddbca6013b2bbad3105263421360e6da6 Mon Sep 17 00:00:00 2001 From: Jan <59206115+Threated@users.noreply.github.com> Date: Tue, 11 Jul 2023 05:21:26 +0200 Subject: [PATCH] Implement `Serialize` for reference types (#264) --- src/serde.rs | 59 +++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 58 insertions(+), 1 deletion(-) diff --git a/src/serde.rs b/src/serde.rs index df4fd2e..6abeb06 100644 --- a/src/serde.rs +++ b/src/serde.rs @@ -1,4 +1,4 @@ -use crate::{DashMap, DashSet}; +use crate::{mapref, setref, DashMap, DashSet}; use core::fmt; use core::hash::{BuildHasher, Hash}; use core::marker::PhantomData; @@ -156,3 +156,60 @@ where seq.end() } } + +macro_rules! serialize_impl { + () => { + fn serialize(&self, serializer: Ser) -> Result + where + Ser: serde::Serializer, + { + std::ops::Deref::deref(self).serialize(serializer) + } + }; +} + +// Map +impl<'a, K: Eq + Hash, V: Serialize, S: BuildHasher> Serialize + for mapref::multiple::RefMulti<'a, K, V, S> +{ + serialize_impl! {} +} + +impl<'a, K: Eq + Hash, V: Serialize, S: BuildHasher> Serialize + for mapref::multiple::RefMutMulti<'a, K, V, S> +{ + serialize_impl! {} +} + +impl<'a, K: Eq + Hash, V: Serialize, S: BuildHasher> Serialize for mapref::one::Ref<'a, K, V, S> { + serialize_impl! {} +} + +impl<'a, K: Eq + Hash, V: Serialize, S: BuildHasher> Serialize + for mapref::one::RefMut<'a, K, V, S> +{ + serialize_impl! {} +} + +impl<'a, K: Eq + Hash, V, T: Serialize, S: BuildHasher> Serialize + for mapref::one::MappedRef<'a, K, V, T, S> +{ + serialize_impl! {} +} + +impl<'a, K: Eq + Hash, V, T: Serialize, S: BuildHasher> Serialize + for mapref::one::MappedRefMut<'a, K, V, T, S> +{ + serialize_impl! {} +} + +// Set +impl<'a, V: Hash + Eq + Serialize, S: BuildHasher> Serialize + for setref::multiple::RefMulti<'a, V, S> +{ + serialize_impl! {} +} + +impl<'a, V: Hash + Eq + Serialize, S: BuildHasher> Serialize for setref::one::Ref<'a, V, S> { + serialize_impl! {} +}