typed_json/
expr_de.rs

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}