ez_jsonrpc/params/
to_positional_impl.rs1use 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);