Skip to content

Commit

Permalink
direct implemetation of Serialize for hashmaps
Browse files Browse the repository at this point in the history
  • Loading branch information
milyin committed Oct 17, 2024
1 parent de29063 commit 0acb199
Showing 1 changed file with 23 additions and 11 deletions.
34 changes: 23 additions & 11 deletions zenoh-ext/src/serialization.rs
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,7 @@ pub trait TrySerialize {
}

pub trait Serialize: TrySerialize {
fn serialize(&self, serializer: &mut ZSerializer) {
self.try_serialize(serializer).unwrap();
}
fn serialize(&self, serializer: &mut ZSerializer);
#[doc(hidden)]
fn serialize_n(slice: &[Self], serializer: &mut ZSerializer)
where
Expand Down Expand Up @@ -336,7 +334,7 @@ impl Deserialize for bool {
}
}

fn serialize_slice<T: TrySerialize>(
fn try_serialize_slice<T: TrySerialize>(
slice: &[T],
serializer: &mut ZSerializer,
) -> Result<(), T::Error> {
Expand All @@ -360,13 +358,13 @@ fn deserialize_slice<T: Deserialize>(
impl<T: TrySerialize> TrySerialize for [T] {
type Error = T::Error;
fn try_serialize(&self, serializer: &mut ZSerializer) -> Result<(), Self::Error> {
serialize_slice(self, serializer)
try_serialize_slice(self, serializer)
}
}
impl<T: TrySerialize, const N: usize> TrySerialize for [T; N] {
type Error = T::Error;
fn try_serialize(&self, serializer: &mut ZSerializer) -> Result<(), Self::Error> {
serialize_slice(self.as_slice(), serializer)
try_serialize_slice(self.as_slice(), serializer)
}
}
impl<'a, T: TrySerialize + 'a> TrySerialize for Cow<'a, [T]>
Expand All @@ -375,13 +373,13 @@ where
{
type Error = T::Error;
fn try_serialize(&self, serializer: &mut ZSerializer) -> Result<(), Self::Error> {
serialize_slice(self, serializer)
try_serialize_slice(self, serializer)
}
}
impl<T: TrySerialize> TrySerialize for Box<[T]> {
type Error = T::Error;
fn try_serialize(&self, serializer: &mut ZSerializer) -> Result<(), Self::Error> {
serialize_slice(self, serializer)
try_serialize_slice(self, serializer)
}
}
impl<T: Deserialize> Deserialize for Box<[T]> {
Expand All @@ -392,7 +390,7 @@ impl<T: Deserialize> Deserialize for Box<[T]> {
impl<T: TrySerialize> TrySerialize for Vec<T> {
type Error = T::Error;
fn try_serialize(&self, serializer: &mut ZSerializer) -> Result<(), Self::Error> {
serialize_slice(self, serializer)
try_serialize_slice(self, serializer)
}
}
impl<T: Deserialize, const N: usize> Deserialize for [T; N] {
Expand Down Expand Up @@ -443,7 +441,14 @@ impl<K: TrySerialize + Eq + Hash, V: TrySerialize> TrySerialize for HashMap<K, V
serializer.try_serialize_iter(self)
}
}
impl<K: Serialize + Eq + Hash, V: Serialize> Serialize for HashMap<K, V> {}
impl<K: Serialize + Eq + Hash, V: Serialize> Serialize for HashMap<K, V>
where
for<'a> (&'a K, &'a V): Serialize,
{
fn serialize(&self, serializer: &mut ZSerializer) {
serializer.serialize_iter(self.iter())
}
}
impl<K: Deserialize + Eq + Hash, V: Deserialize> Deserialize for HashMap<K, V> {
fn deserialize(deserializer: &mut ZDeserializer) -> Result<Self, ZDeserializeError> {
deserializer.deserialize_iter()?.collect()
Expand All @@ -455,7 +460,14 @@ impl<K: TrySerialize + Ord, V: TrySerialize> TrySerialize for BTreeMap<K, V> {
serializer.try_serialize_iter(self)
}
}
impl<K: Serialize + Ord, V: Serialize> Serialize for BTreeMap<K, V> {}
impl<K: Serialize + Ord, V: Serialize> Serialize for BTreeMap<K, V>
where
for<'a> (&'a K, &'a V): Serialize,
{
fn serialize(&self, serializer: &mut ZSerializer) {
serializer.serialize_iter(self)
}
}
impl<K: Deserialize + Ord, V: Deserialize> Deserialize for BTreeMap<K, V> {
fn deserialize(deserializer: &mut ZDeserializer) -> Result<Self, ZDeserializeError> {
deserializer.deserialize_iter()?.collect()
Expand Down

0 comments on commit 0acb199

Please sign in to comment.