1use std::io;
2
3pub fn serialize<S>(
8 kind: &io::ErrorKind,
9 serializer: S,
10) -> serde::export::Result<S::Ok, S::Error>
11where
12 S: serde::Serializer,
13{
14 match *kind {
15 io::ErrorKind::NotFound => serde::Serializer::serialize_unit_variant(
16 serializer,
17 "ErrorKind",
18 0u32,
19 "NotFound",
20 ),
21 io::ErrorKind::PermissionDenied => {
22 serde::Serializer::serialize_unit_variant(
23 serializer,
24 "ErrorKind",
25 1u32,
26 "PermissionDenied",
27 )
28 }
29 io::ErrorKind::ConnectionRefused => {
30 serde::Serializer::serialize_unit_variant(
31 serializer,
32 "ErrorKind",
33 2u32,
34 "ConnectionRefused",
35 )
36 }
37 io::ErrorKind::ConnectionReset => {
38 serde::Serializer::serialize_unit_variant(
39 serializer,
40 "ErrorKind",
41 3u32,
42 "ConnectionReset",
43 )
44 }
45 io::ErrorKind::ConnectionAborted => {
46 serde::Serializer::serialize_unit_variant(
47 serializer,
48 "ErrorKind",
49 4u32,
50 "ConnectionAborted",
51 )
52 }
53 io::ErrorKind::NotConnected => {
54 serde::Serializer::serialize_unit_variant(
55 serializer,
56 "ErrorKind",
57 5u32,
58 "NotConnected",
59 )
60 }
61 io::ErrorKind::AddrInUse => serde::Serializer::serialize_unit_variant(
62 serializer,
63 "ErrorKind",
64 6u32,
65 "AddrInUse",
66 ),
67 io::ErrorKind::AddrNotAvailable => {
68 serde::Serializer::serialize_unit_variant(
69 serializer,
70 "ErrorKind",
71 7u32,
72 "AddrNotAvailable",
73 )
74 }
75 io::ErrorKind::BrokenPipe => serde::Serializer::serialize_unit_variant(
76 serializer,
77 "ErrorKind",
78 8u32,
79 "BrokenPipe",
80 ),
81 io::ErrorKind::AlreadyExists => {
82 serde::Serializer::serialize_unit_variant(
83 serializer,
84 "ErrorKind",
85 9u32,
86 "AlreadyExists",
87 )
88 }
89 io::ErrorKind::WouldBlock => serde::Serializer::serialize_unit_variant(
90 serializer,
91 "ErrorKind",
92 10u32,
93 "WouldBlock",
94 ),
95 io::ErrorKind::InvalidInput => {
96 serde::Serializer::serialize_unit_variant(
97 serializer,
98 "ErrorKind",
99 11u32,
100 "InvalidInput",
101 )
102 }
103 io::ErrorKind::InvalidData => {
104 serde::Serializer::serialize_unit_variant(
105 serializer,
106 "ErrorKind",
107 12u32,
108 "InvalidData",
109 )
110 }
111 io::ErrorKind::TimedOut => serde::Serializer::serialize_unit_variant(
112 serializer,
113 "ErrorKind",
114 13u32,
115 "TimedOut",
116 ),
117 io::ErrorKind::WriteZero => serde::Serializer::serialize_unit_variant(
118 serializer,
119 "ErrorKind",
120 14u32,
121 "WriteZero",
122 ),
123 io::ErrorKind::Interrupted => {
124 serde::Serializer::serialize_unit_variant(
125 serializer,
126 "ErrorKind",
127 15u32,
128 "Interrupted",
129 )
130 }
131 io::ErrorKind::Other => serde::Serializer::serialize_unit_variant(
132 serializer,
133 "ErrorKind",
134 16u32,
135 "Other",
136 ),
137 io::ErrorKind::UnexpectedEof => {
138 serde::Serializer::serialize_unit_variant(
139 serializer,
140 "ErrorKind",
141 17u32,
142 "UnexpectedEof",
143 )
144 }
145 _ => serde::Serializer::serialize_unit_variant(
150 serializer,
151 "ErrorKind",
152 16u32,
153 "Other",
154 ),
155 }
156}
157
158pub fn deserialize<'de, D>(
160 deserializer: D,
161) -> serde::export::Result<io::ErrorKind, D::Error>
162where
163 D: serde::Deserializer<'de>,
164{
165 #[allow(non_camel_case_types)]
166 enum Field {
167 field0,
168 field1,
169 field2,
170 field3,
171 field4,
172 field5,
173 field6,
174 field7,
175 field8,
176 field9,
177 field10,
178 field11,
179 field12,
180 field13,
181 field14,
182 field15,
183 field16,
184 field17,
185 }
186 struct FieldVisitor;
187 impl<'de> serde::de::Visitor<'de> for FieldVisitor {
188 type Value = Field;
189 fn expecting(
190 &self,
191 formatter: &mut serde::export::Formatter,
192 ) -> serde::export::fmt::Result {
193 serde::export::Formatter::write_str(formatter, "variant identifier")
194 }
195 fn visit_u64<E>(
196 self,
197 value: u64,
198 ) -> serde::export::Result<Self::Value, E>
199 where
200 E: serde::de::Error,
201 {
202 match value {
203 0u64 => serde::export::Ok(Field::field0),
204 1u64 => serde::export::Ok(Field::field1),
205 2u64 => serde::export::Ok(Field::field2),
206 3u64 => serde::export::Ok(Field::field3),
207 4u64 => serde::export::Ok(Field::field4),
208 5u64 => serde::export::Ok(Field::field5),
209 6u64 => serde::export::Ok(Field::field6),
210 7u64 => serde::export::Ok(Field::field7),
211 8u64 => serde::export::Ok(Field::field8),
212 9u64 => serde::export::Ok(Field::field9),
213 10u64 => serde::export::Ok(Field::field10),
214 11u64 => serde::export::Ok(Field::field11),
215 12u64 => serde::export::Ok(Field::field12),
216 13u64 => serde::export::Ok(Field::field13),
217 14u64 => serde::export::Ok(Field::field14),
218 15u64 => serde::export::Ok(Field::field15),
219 16u64 => serde::export::Ok(Field::field16),
220 17u64 => serde::export::Ok(Field::field17),
221 _ => serde::export::Err(serde::de::Error::invalid_value(
222 serde::de::Unexpected::Unsigned(value),
223 &"variant index 0 <= i < 18",
224 )),
225 }
226 }
227 fn visit_str<E>(
228 self,
229 value: &str,
230 ) -> serde::export::Result<Self::Value, E>
231 where
232 E: serde::de::Error,
233 {
234 match value {
235 "NotFound" => serde::export::Ok(Field::field0),
236 "PermissionDenied" => serde::export::Ok(Field::field1),
237 "ConnectionRefused" => serde::export::Ok(Field::field2),
238 "ConnectionReset" => serde::export::Ok(Field::field3),
239 "ConnectionAborted" => serde::export::Ok(Field::field4),
240 "NotConnected" => serde::export::Ok(Field::field5),
241 "AddrInUse" => serde::export::Ok(Field::field6),
242 "AddrNotAvailable" => serde::export::Ok(Field::field7),
243 "BrokenPipe" => serde::export::Ok(Field::field8),
244 "AlreadyExists" => serde::export::Ok(Field::field9),
245 "WouldBlock" => serde::export::Ok(Field::field10),
246 "InvalidInput" => serde::export::Ok(Field::field11),
247 "InvalidData" => serde::export::Ok(Field::field12),
248 "TimedOut" => serde::export::Ok(Field::field13),
249 "WriteZero" => serde::export::Ok(Field::field14),
250 "Interrupted" => serde::export::Ok(Field::field15),
251 "Other" => serde::export::Ok(Field::field16),
252 "UnexpectedEof" => serde::export::Ok(Field::field17),
253 _ => serde::export::Err(serde::de::Error::unknown_variant(
254 value, VARIANTS,
255 )),
256 }
257 }
258 fn visit_bytes<E>(
259 self,
260 value: &[u8],
261 ) -> serde::export::Result<Self::Value, E>
262 where
263 E: serde::de::Error,
264 {
265 match value {
266 b"NotFound" => serde::export::Ok(Field::field0),
267 b"PermissionDenied" => serde::export::Ok(Field::field1),
268 b"ConnectionRefused" => serde::export::Ok(Field::field2),
269 b"ConnectionReset" => serde::export::Ok(Field::field3),
270 b"ConnectionAborted" => serde::export::Ok(Field::field4),
271 b"NotConnected" => serde::export::Ok(Field::field5),
272 b"AddrInUse" => serde::export::Ok(Field::field6),
273 b"AddrNotAvailable" => serde::export::Ok(Field::field7),
274 b"BrokenPipe" => serde::export::Ok(Field::field8),
275 b"AlreadyExists" => serde::export::Ok(Field::field9),
276 b"WouldBlock" => serde::export::Ok(Field::field10),
277 b"InvalidInput" => serde::export::Ok(Field::field11),
278 b"InvalidData" => serde::export::Ok(Field::field12),
279 b"TimedOut" => serde::export::Ok(Field::field13),
280 b"WriteZero" => serde::export::Ok(Field::field14),
281 b"Interrupted" => serde::export::Ok(Field::field15),
282 b"Other" => serde::export::Ok(Field::field16),
283 b"UnexpectedEof" => serde::export::Ok(Field::field17),
284 _ => {
285 let value = &serde::export::from_utf8_lossy(value);
286 serde::export::Err(serde::de::Error::unknown_variant(
287 value, VARIANTS,
288 ))
289 }
290 }
291 }
292 }
293 impl<'de> serde::Deserialize<'de> for Field {
294 #[inline]
295 fn deserialize<D>(
296 deserializer: D,
297 ) -> serde::export::Result<Self, D::Error>
298 where
299 D: serde::Deserializer<'de>,
300 {
301 serde::Deserializer::deserialize_identifier(
302 deserializer,
303 FieldVisitor,
304 )
305 }
306 }
307 struct Visitor<'de> {
308 marker: serde::export::PhantomData<io::ErrorKind>,
309 lifetime: serde::export::PhantomData<&'de ()>,
310 }
311 impl<'de> serde::de::Visitor<'de> for Visitor<'de> {
312 type Value = io::ErrorKind;
313 fn expecting(
314 &self,
315 formatter: &mut serde::export::Formatter,
316 ) -> serde::export::fmt::Result {
317 serde::export::Formatter::write_str(formatter, "enum io::ErrorKind")
318 }
319 fn visit_enum<A>(
320 self,
321 data: A,
322 ) -> serde::export::Result<Self::Value, A::Error>
323 where
324 A: serde::de::EnumAccess<'de>,
325 {
326 match match serde::de::EnumAccess::variant(data) {
327 serde::export::Ok(val) => val,
328 serde::export::Err(err) => {
329 return serde::export::Err(err);
330 }
331 } {
332 (Field::field0, variant) => {
333 match serde::de::VariantAccess::unit_variant(variant) {
334 serde::export::Ok(val) => val,
335 serde::export::Err(err) => {
336 return serde::export::Err(err);
337 }
338 };
339 serde::export::Ok(io::ErrorKind::NotFound)
340 }
341 (Field::field1, variant) => {
342 match serde::de::VariantAccess::unit_variant(variant) {
343 serde::export::Ok(val) => val,
344 serde::export::Err(err) => {
345 return serde::export::Err(err);
346 }
347 };
348 serde::export::Ok(io::ErrorKind::PermissionDenied)
349 }
350 (Field::field2, variant) => {
351 match serde::de::VariantAccess::unit_variant(variant) {
352 serde::export::Ok(val) => val,
353 serde::export::Err(err) => {
354 return serde::export::Err(err);
355 }
356 };
357 serde::export::Ok(io::ErrorKind::ConnectionRefused)
358 }
359 (Field::field3, variant) => {
360 match serde::de::VariantAccess::unit_variant(variant) {
361 serde::export::Ok(val) => val,
362 serde::export::Err(err) => {
363 return serde::export::Err(err);
364 }
365 };
366 serde::export::Ok(io::ErrorKind::ConnectionReset)
367 }
368 (Field::field4, variant) => {
369 match serde::de::VariantAccess::unit_variant(variant) {
370 serde::export::Ok(val) => val,
371 serde::export::Err(err) => {
372 return serde::export::Err(err);
373 }
374 };
375 serde::export::Ok(io::ErrorKind::ConnectionAborted)
376 }
377 (Field::field5, variant) => {
378 match serde::de::VariantAccess::unit_variant(variant) {
379 serde::export::Ok(val) => val,
380 serde::export::Err(err) => {
381 return serde::export::Err(err);
382 }
383 };
384 serde::export::Ok(io::ErrorKind::NotConnected)
385 }
386 (Field::field6, variant) => {
387 match serde::de::VariantAccess::unit_variant(variant) {
388 serde::export::Ok(val) => val,
389 serde::export::Err(err) => {
390 return serde::export::Err(err);
391 }
392 };
393 serde::export::Ok(io::ErrorKind::AddrInUse)
394 }
395 (Field::field7, variant) => {
396 match serde::de::VariantAccess::unit_variant(variant) {
397 serde::export::Ok(val) => val,
398 serde::export::Err(err) => {
399 return serde::export::Err(err);
400 }
401 };
402 serde::export::Ok(io::ErrorKind::AddrNotAvailable)
403 }
404 (Field::field8, variant) => {
405 match serde::de::VariantAccess::unit_variant(variant) {
406 serde::export::Ok(val) => val,
407 serde::export::Err(err) => {
408 return serde::export::Err(err);
409 }
410 };
411 serde::export::Ok(io::ErrorKind::BrokenPipe)
412 }
413 (Field::field9, variant) => {
414 match serde::de::VariantAccess::unit_variant(variant) {
415 serde::export::Ok(val) => val,
416 serde::export::Err(err) => {
417 return serde::export::Err(err);
418 }
419 };
420 serde::export::Ok(io::ErrorKind::AlreadyExists)
421 }
422 (Field::field10, variant) => {
423 match serde::de::VariantAccess::unit_variant(variant) {
424 serde::export::Ok(val) => val,
425 serde::export::Err(err) => {
426 return serde::export::Err(err);
427 }
428 };
429 serde::export::Ok(io::ErrorKind::WouldBlock)
430 }
431 (Field::field11, variant) => {
432 match serde::de::VariantAccess::unit_variant(variant) {
433 serde::export::Ok(val) => val,
434 serde::export::Err(err) => {
435 return serde::export::Err(err);
436 }
437 };
438 serde::export::Ok(io::ErrorKind::InvalidInput)
439 }
440 (Field::field12, variant) => {
441 match serde::de::VariantAccess::unit_variant(variant) {
442 serde::export::Ok(val) => val,
443 serde::export::Err(err) => {
444 return serde::export::Err(err);
445 }
446 };
447 serde::export::Ok(io::ErrorKind::InvalidData)
448 }
449 (Field::field13, variant) => {
450 match serde::de::VariantAccess::unit_variant(variant) {
451 serde::export::Ok(val) => val,
452 serde::export::Err(err) => {
453 return serde::export::Err(err);
454 }
455 };
456 serde::export::Ok(io::ErrorKind::TimedOut)
457 }
458 (Field::field14, variant) => {
459 match serde::de::VariantAccess::unit_variant(variant) {
460 serde::export::Ok(val) => val,
461 serde::export::Err(err) => {
462 return serde::export::Err(err);
463 }
464 };
465 serde::export::Ok(io::ErrorKind::WriteZero)
466 }
467 (Field::field15, variant) => {
468 match serde::de::VariantAccess::unit_variant(variant) {
469 serde::export::Ok(val) => val,
470 serde::export::Err(err) => {
471 return serde::export::Err(err);
472 }
473 };
474 serde::export::Ok(io::ErrorKind::Interrupted)
475 }
476 (Field::field16, variant) => {
477 match serde::de::VariantAccess::unit_variant(variant) {
478 serde::export::Ok(val) => val,
479 serde::export::Err(err) => {
480 return serde::export::Err(err);
481 }
482 };
483 serde::export::Ok(io::ErrorKind::Other)
484 }
485 (Field::field17, variant) => {
486 match serde::de::VariantAccess::unit_variant(variant) {
487 serde::export::Ok(val) => val,
488 serde::export::Err(err) => {
489 return serde::export::Err(err);
490 }
491 };
492 serde::export::Ok(io::ErrorKind::UnexpectedEof)
493 }
494 }
495 }
496 }
497 const VARIANTS: &'static [&'static str] = &[
498 "NotFound",
499 "PermissionDenied",
500 "ConnectionRefused",
501 "ConnectionReset",
502 "ConnectionAborted",
503 "NotConnected",
504 "AddrInUse",
505 "AddrNotAvailable",
506 "BrokenPipe",
507 "AlreadyExists",
508 "WouldBlock",
509 "InvalidInput",
510 "InvalidData",
511 "TimedOut",
512 "WriteZero",
513 "Interrupted",
514 "Other",
515 "UnexpectedEof",
516 ];
517 serde::Deserializer::deserialize_enum(
518 deserializer,
519 "ErrorKind",
520 VARIANTS,
521 Visitor {
522 marker: serde::export::PhantomData::<io::ErrorKind>,
523 lifetime: serde::export::PhantomData,
524 },
525 )
526}