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