serde_core/ser/
impossible.rs1use crate::lib::*;
4
5use crate::ser::{
6    self, Serialize, SerializeMap, SerializeSeq, SerializeStruct, SerializeStructVariant,
7    SerializeTuple, SerializeTupleStruct, SerializeTupleVariant,
8};
9
10pub struct Impossible<Ok, Error> {
61    void: Void,
62    ok: PhantomData<Ok>,
63    error: PhantomData<Error>,
64}
65
66enum Void {}
67
68impl<Ok, Error> SerializeSeq for Impossible<Ok, Error>
69where
70    Error: ser::Error,
71{
72    type Ok = Ok;
73    type Error = Error;
74
75    fn serialize_element<T>(&mut self, value: &T) -> Result<(), Error>
76    where
77        T: ?Sized + Serialize,
78    {
79        let _ = value;
80        match self.void {}
81    }
82
83    fn end(self) -> Result<Ok, Error> {
84        match self.void {}
85    }
86}
87
88impl<Ok, Error> SerializeTuple for Impossible<Ok, Error>
89where
90    Error: ser::Error,
91{
92    type Ok = Ok;
93    type Error = Error;
94
95    fn serialize_element<T>(&mut self, value: &T) -> Result<(), Error>
96    where
97        T: ?Sized + Serialize,
98    {
99        let _ = value;
100        match self.void {}
101    }
102
103    fn end(self) -> Result<Ok, Error> {
104        match self.void {}
105    }
106}
107
108impl<Ok, Error> SerializeTupleStruct for Impossible<Ok, Error>
109where
110    Error: ser::Error,
111{
112    type Ok = Ok;
113    type Error = Error;
114
115    fn serialize_field<T>(&mut self, value: &T) -> Result<(), Error>
116    where
117        T: ?Sized + Serialize,
118    {
119        let _ = value;
120        match self.void {}
121    }
122
123    fn end(self) -> Result<Ok, Error> {
124        match self.void {}
125    }
126}
127
128impl<Ok, Error> SerializeTupleVariant for Impossible<Ok, Error>
129where
130    Error: ser::Error,
131{
132    type Ok = Ok;
133    type Error = Error;
134
135    fn serialize_field<T>(&mut self, value: &T) -> Result<(), Error>
136    where
137        T: ?Sized + Serialize,
138    {
139        let _ = value;
140        match self.void {}
141    }
142
143    fn end(self) -> Result<Ok, Error> {
144        match self.void {}
145    }
146}
147
148impl<Ok, Error> SerializeMap for Impossible<Ok, Error>
149where
150    Error: ser::Error,
151{
152    type Ok = Ok;
153    type Error = Error;
154
155    fn serialize_key<T>(&mut self, key: &T) -> Result<(), Error>
156    where
157        T: ?Sized + Serialize,
158    {
159        let _ = key;
160        match self.void {}
161    }
162
163    fn serialize_value<T>(&mut self, value: &T) -> Result<(), Error>
164    where
165        T: ?Sized + Serialize,
166    {
167        let _ = value;
168        match self.void {}
169    }
170
171    fn end(self) -> Result<Ok, Error> {
172        match self.void {}
173    }
174}
175
176impl<Ok, Error> SerializeStruct for Impossible<Ok, Error>
177where
178    Error: ser::Error,
179{
180    type Ok = Ok;
181    type Error = Error;
182
183    fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Error>
184    where
185        T: ?Sized + Serialize,
186    {
187        let _ = key;
188        let _ = value;
189        match self.void {}
190    }
191
192    fn end(self) -> Result<Ok, Error> {
193        match self.void {}
194    }
195}
196
197impl<Ok, Error> SerializeStructVariant for Impossible<Ok, Error>
198where
199    Error: ser::Error,
200{
201    type Ok = Ok;
202    type Error = Error;
203
204    fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Error>
205    where
206        T: ?Sized + Serialize,
207    {
208        let _ = key;
209        let _ = value;
210        match self.void {}
211    }
212
213    fn end(self) -> Result<Ok, Error> {
214        match self.void {}
215    }
216}