simd_json_derive/impls/
tpl.rs1use crate::{de, Deserialize, Result, Serialize, Tape, Write};
2
3impl Serialize for () {
4 #[inline]
5 fn json_write<W>(&self, writer: &mut W) -> Result
6 where
7 W: Write,
8 {
9 writer.write_all(b"null")
10 }
11}
12
13impl<'input> Deserialize<'input> for () {
14 #[inline]
15 fn from_tape(tape: &mut Tape<'input>) -> de::Result<Self>
16 where
17 Self: std::marker::Sized + 'input,
18 {
19 if let Some(simd_json::Node::Static(simd_json::StaticNode::Null)) = tape.next() {
20 Ok(())
21 } else {
22 Err(de::Error::expected_null())
23 }
24 }
25}
26
27macro_rules! tuple_impls {
30 ($($len:expr => ($($n:tt $name:ident)+))+) => {
31 $(
32 impl<$($name),+> Serialize for ($($name,)+)
33 where
34 $($name: Serialize,)+
35 {
36 #[inline]
37 fn json_write<W>(&self, writer: &mut W) -> Result
38 where
39 W: Write,
40 {
41 writer.write_all(b"[")?;
42 $(
43 if $n != 0 {
44 writer.write_all(b",")?;
45 }
46 self.$n.json_write(writer)?;
47 )+
48 writer.write_all(b"]")
49 }
50 }
51 impl<'input, $($name),+> Deserialize<'input> for ($($name,)+)
52 where
53 $($name: Deserialize<'input>,)+
54 {
55 #[inline]
56 fn from_tape(tape: &mut Tape<'input>) -> de::Result<Self>
57 where
58 Self: std::marker::Sized + 'input,
59 {
60 if let Some(simd_json::Node::Array{len: $len, ..}) = tape.next() {
61 Ok((
62 $($name::from_tape(tape)?,)+
63 ))
64 } else {
65 Err(de::Error::expected_array())
66 }
67 }
68 }
69 )+
70 }
71}
72
73tuple_impls! {
74 1 => (0 T0)
75 2 => (0 T0 1 T1)
76 3 => (0 T0 1 T1 2 T2)
77 4 => (0 T0 1 T1 2 T2 3 T3)
78 5 => (0 T0 1 T1 2 T2 3 T3 4 T4)
79 6 => (0 T0 1 T1 2 T2 3 T3 4 T4 5 T5)
80 7 => (0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6)
81 8 => (0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7)
82 9 => (0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8)
83 10 => (0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9)
84 11 => (0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10)
85 12 => (0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11)
86 13 => (0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12)
87 14 => (0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12 13 T13)
88 15 => (0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12 13 T13 14 T14)
89 16 => (0 T0 1 T1 2 T2 3 T3 4 T4 5 T5 6 T6 7 T7 8 T8 9 T9 10 T10 11 T11 12 T12 13 T13 14 T14 15 T15)
90}
91
92#[cfg(test)]
93mod test {
94 use crate::*;
95
96 #[test]
97 fn tpl() {
98 assert_eq!((1).json_string().expect("invalid test data"), "1");
99 assert_eq!((1, 2).json_string().expect("invalid test data"), "[1,2]");
100 assert_eq!(
101 (1, 2, 3).json_string().expect("invalid test data"),
102 "[1,2,3]"
103 );
104 }
105}