1use serde::de::Visitor;
5
6pub struct DeserializeNameAdapter<D> {
9 inner: D,
10 name: &'static str,
11}
12
13impl<D> DeserializeNameAdapter<D> {
14 pub fn new(inner: D, name: &'static str) -> Self {
15 Self { inner, name }
16 }
17}
18
19macro_rules! declare_deserialize {
20 ($method:ident) => {
21 fn $method<V>(self, visitor: V) -> std::result::Result<V::Value, Self::Error>
22 where
23 V: Visitor<'de>,
24 {
25 self.inner.$method(visitor)
26 }
27 };
28}
29
30impl<'de, D> serde::de::Deserializer<'de> for DeserializeNameAdapter<D>
31where
32 D: serde::de::Deserializer<'de>,
33{
34 type Error = D::Error;
35
36 declare_deserialize!(deserialize_any);
37 declare_deserialize!(deserialize_identifier);
38 declare_deserialize!(deserialize_ignored_any);
39 declare_deserialize!(deserialize_bool);
40 declare_deserialize!(deserialize_i8);
41 declare_deserialize!(deserialize_i16);
42 declare_deserialize!(deserialize_i32);
43 declare_deserialize!(deserialize_i64);
44 declare_deserialize!(deserialize_i128);
45 declare_deserialize!(deserialize_u8);
46 declare_deserialize!(deserialize_u16);
47 declare_deserialize!(deserialize_u32);
48 declare_deserialize!(deserialize_u64);
49 declare_deserialize!(deserialize_u128);
50 declare_deserialize!(deserialize_f32);
51 declare_deserialize!(deserialize_f64);
52 declare_deserialize!(deserialize_char);
53 declare_deserialize!(deserialize_str);
54 declare_deserialize!(deserialize_string);
55 declare_deserialize!(deserialize_bytes);
56 declare_deserialize!(deserialize_byte_buf);
57 declare_deserialize!(deserialize_option);
58 declare_deserialize!(deserialize_unit);
59 declare_deserialize!(deserialize_seq);
60 declare_deserialize!(deserialize_map);
61
62 fn deserialize_tuple<V>(
63 self,
64 len: usize,
65 visitor: V,
66 ) -> std::result::Result<V::Value, Self::Error>
67 where
68 V: Visitor<'de>,
69 {
70 self.inner.deserialize_tuple(len, visitor)
71 }
72
73 fn deserialize_unit_struct<V>(
74 self,
75 _name: &'static str,
76 visitor: V,
77 ) -> std::result::Result<V::Value, Self::Error>
78 where
79 V: Visitor<'de>,
80 {
81 self.inner.deserialize_unit_struct(self.name, visitor)
82 }
83
84 fn deserialize_newtype_struct<V>(
85 self,
86 _name: &'static str,
87 visitor: V,
88 ) -> std::result::Result<V::Value, Self::Error>
89 where
90 V: Visitor<'de>,
91 {
92 self.inner.deserialize_newtype_struct(self.name, visitor)
93 }
94
95 fn deserialize_tuple_struct<V>(
96 self,
97 _name: &'static str,
98 len: usize,
99 visitor: V,
100 ) -> std::result::Result<V::Value, Self::Error>
101 where
102 V: Visitor<'de>,
103 {
104 self.inner.deserialize_tuple_struct(self.name, len, visitor)
105 }
106
107 fn deserialize_struct<V>(
108 self,
109 _name: &'static str,
110 fields: &'static [&'static str],
111 visitor: V,
112 ) -> std::result::Result<V::Value, Self::Error>
113 where
114 V: Visitor<'de>,
115 {
116 self.inner.deserialize_struct(self.name, fields, visitor)
117 }
118
119 fn deserialize_enum<V>(
120 self,
121 _name: &'static str,
122 variants: &'static [&'static str],
123 visitor: V,
124 ) -> std::result::Result<V::Value, Self::Error>
125 where
126 V: Visitor<'de>,
127 {
128 self.inner.deserialize_enum(self.name, variants, visitor)
129 }
130
131 fn is_human_readable(&self) -> bool {
132 self.inner.is_human_readable()
133 }
134}