ez_jsonrpc/params/
to_positional_impl.rs

1use super::SerializePositional;
2use serde::{ser::SerializeSeq, Serialize};
3
4macro_rules! ptr {
5    ($($ty:ty),* $(,)?) => {
6        $(
7            impl<T: ?Sized> SerializePositional for $ty where T: SerializePositional {
8                fn ser_positional<S: SerializeSeq>(&self, serializer: S) -> Result<S::Ok, S::Error> {
9                    T::ser_positional(self, serializer)
10                }
11            }
12        )*
13    };
14}
15
16ptr!(&T, &mut T, Box<T>, std::sync::Arc<T>, std::rc::Rc<T>);
17
18macro_rules! iter {
19    ($($ty:ty),* $(,)?) => {
20        $(
21            impl<T> SerializePositional for $ty where T: Serialize {
22                fn ser_positional<S: SerializeSeq>(&self, mut serializer: S) -> Result<S::Ok, S::Error> {
23                    for it in self {
24                        serializer.serialize_element(it)?
25                    }
26                    serializer.end()
27                }
28            }
29        )*
30    };
31}
32
33iter!(
34    Vec<T>,
35    [T],
36    std::collections::LinkedList<T>,
37    std::collections::VecDeque<T>,
38    std::collections::BinaryHeap<T>,
39    std::collections::BTreeSet<T>,
40    std::collections::HashSet<T>,
41);
42
43impl<const N: usize, T> SerializePositional for [T; N]
44where
45    T: Serialize,
46{
47    fn ser_positional<S: SerializeSeq>(&self, serializer: S) -> Result<S::Ok, S::Error> {
48        self.as_slice().ser_positional(serializer)
49    }
50}
51
52macro_rules! tuple {
53    ($($ty:ident),* $(,)?) => {
54        impl<$($ty),*> SerializePositional for ($($ty,)*)
55        where
56        $($ty: Serialize),*
57        {
58            fn ser_positional<S: SerializeSeq>(&self,
59                #[allow(unused_mut)]
60                mut serializer: S
61            ) -> Result<S::Ok, S::Error> {
62                #[allow(non_snake_case)]
63                let ($($ty,)*) = self;
64                $(
65                    serializer.serialize_element($ty)?;
66                )*
67                serializer.end()
68            }
69        }
70    };
71}
72
73super::for_tuples!(tuple);