rune_alloc/serde/
ser.rs

1use serde::ser::{Serialize, Serializer};
2
3use crate::borrow::{Cow, TryToOwned};
4use crate::boxed::Box;
5use crate::btree::set::BTreeSet;
6use crate::sync::Arc;
7use crate::vec::Vec;
8
9macro_rules! deref_impl {
10    (
11        $(#[doc = $doc:tt])*
12        <$($desc:tt)+
13    ) => {
14        $(#[doc = $doc])*
15        impl <$($desc)+ {
16            #[inline]
17            fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
18            where
19                S: Serializer,
20            {
21                (**self).serialize(serializer)
22            }
23        }
24    };
25}
26
27deref_impl!(<T: ?Sized> Serialize for Box<T> where T: Serialize);
28deref_impl!(<T: ?Sized> Serialize for Arc<T> where T: Serialize);
29deref_impl!(<T: ?Sized> Serialize for Cow<'_, T> where T: Serialize + TryToOwned);
30
31macro_rules! seq_impl {
32    ($ty:ident <T $(: $tbound1:ident $(+ $tbound2:ident)*)* $(, $typaram:ident : $bound:ident)*>) => {
33        impl<T $(, $typaram)*> Serialize for $ty<T $(, $typaram)*>
34        where
35            T: Serialize,
36        {
37            #[inline]
38            fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
39            where
40                S: Serializer,
41            {
42                serializer.collect_seq(self)
43            }
44        }
45    }
46}
47
48seq_impl!(BTreeSet<T: Ord>);
49seq_impl!(Vec<T>);