1use serde::{de::Visitor, forward_to_deserialize_any, Deserializer};
2
3#[derive(Clone, Copy)]
4pub struct Expr<T>(pub T);
5
6impl<'de, D: crate::Deserializer<'de>> Deserializer<'de> for Expr<D> {
7 type Error = serde::de::value::Error;
8
9 fn deserialize_any<V>(self, visitor: V) -> Result<V::Value, Self::Error>
10 where
11 V: Visitor<'de>,
12 {
13 self.0.deserialize_any2(visitor)
14 }
15
16 #[inline]
17 fn deserialize_option<V>(self, visitor: V) -> Result<V::Value, Self::Error>
18 where
19 V: Visitor<'de>,
20 {
21 visitor.visit_some(self)
22 }
23
24 forward_to_deserialize_any! {
25 bool i8 i16 i32 i64 i128 u8 u16 u32 u64 u128 f32 f64 char str string
26 bytes byte_buf unit unit_struct newtype_struct seq tuple
27 tuple_struct map struct enum identifier ignored_any
28 }
29}
30impl<'de, D: crate::Deserializer<'de>> crate::Deserializer<'de> for Expr<D> {
31 fn deserialize_any2<V>(self, visitor: V) -> Result<V::Value, serde::de::value::Error>
32 where
33 V: Visitor<'de>,
34 {
35 self.0.deserialize_any2(visitor)
36 }
37}
38
39impl<'de> crate::Deserializer<'de> for i128 {
40 fn deserialize_any2<V>(self, visitor: V) -> Result<V::Value, serde::de::value::Error>
41 where
42 V: Visitor<'de>,
43 {
44 visitor.visit_i128(self)
45 }
46}
47impl<'de> crate::Deserializer<'de> for i64 {
48 fn deserialize_any2<V>(self, visitor: V) -> Result<V::Value, serde::de::value::Error>
49 where
50 V: Visitor<'de>,
51 {
52 visitor.visit_i64(self)
53 }
54}
55impl<'de> crate::Deserializer<'de> for i32 {
56 fn deserialize_any2<V>(self, visitor: V) -> Result<V::Value, serde::de::value::Error>
57 where
58 V: Visitor<'de>,
59 {
60 visitor.visit_i32(self)
61 }
62}
63impl<'de> crate::Deserializer<'de> for i16 {
64 fn deserialize_any2<V>(self, visitor: V) -> Result<V::Value, serde::de::value::Error>
65 where
66 V: Visitor<'de>,
67 {
68 visitor.visit_i16(self)
69 }
70}
71impl<'de> crate::Deserializer<'de> for i8 {
72 fn deserialize_any2<V>(self, visitor: V) -> Result<V::Value, serde::de::value::Error>
73 where
74 V: Visitor<'de>,
75 {
76 visitor.visit_i8(self)
77 }
78}
79impl<'de> crate::Deserializer<'de> for u128 {
80 fn deserialize_any2<V>(self, visitor: V) -> Result<V::Value, serde::de::value::Error>
81 where
82 V: Visitor<'de>,
83 {
84 visitor.visit_u128(self)
85 }
86}
87impl<'de> crate::Deserializer<'de> for u64 {
88 fn deserialize_any2<V>(self, visitor: V) -> Result<V::Value, serde::de::value::Error>
89 where
90 V: Visitor<'de>,
91 {
92 visitor.visit_u64(self)
93 }
94}
95impl<'de> crate::Deserializer<'de> for u32 {
96 fn deserialize_any2<V>(self, visitor: V) -> Result<V::Value, serde::de::value::Error>
97 where
98 V: Visitor<'de>,
99 {
100 visitor.visit_u32(self)
101 }
102}
103impl<'de> crate::Deserializer<'de> for u16 {
104 fn deserialize_any2<V>(self, visitor: V) -> Result<V::Value, serde::de::value::Error>
105 where
106 V: Visitor<'de>,
107 {
108 visitor.visit_u16(self)
109 }
110}
111impl<'de> crate::Deserializer<'de> for u8 {
112 fn deserialize_any2<V>(self, visitor: V) -> Result<V::Value, serde::de::value::Error>
113 where
114 V: Visitor<'de>,
115 {
116 visitor.visit_u8(self)
117 }
118}
119
120impl<'de> crate::Deserializer<'de> for &str {
121 fn deserialize_any2<V>(self, visitor: V) -> Result<V::Value, serde::de::value::Error>
122 where
123 V: Visitor<'de>,
124 {
125 visitor.visit_str(self)
126 }
127}
128
129#[cfg(feature = "std")]
130impl<'de> crate::Deserializer<'de> for String {
131 fn deserialize_any2<V>(self, visitor: V) -> Result<V::Value, serde::de::value::Error>
132 where
133 V: Visitor<'de>,
134 {
135 visitor.visit_string(self)
136 }
137}
138
139impl<'de> crate::Deserializer<'de> for bool {
140 fn deserialize_any2<V>(self, visitor: V) -> Result<V::Value, serde::de::value::Error>
141 where
142 V: serde::de::Visitor<'de>,
143 {
144 visitor.visit_bool(self)
145 }
146}