msd/de/
mod.rs

1//! MSD deserialization.
2//!
3//! This module provides all of the tools necessary for deserializing MSD input into types
4//! implementing [`Deserialize`].
5//!
6//! # Example
7//! ```
8//! use std::collections::HashMap;
9//!
10//! let input = b"#foo:1;\n#bar:2;\n";
11//! let deserialized: HashMap<String, u64> = msd::from_bytes(input.as_slice()).unwrap();
12//!
13//! let mut expected = HashMap::new();
14//! expected.insert("foo".to_owned(), 1);
15//! expected.insert("bar".to_owned(), 2);
16//!
17//! assert_eq!(deserialized, expected);
18//! ```
19//!
20//! [`Deserialize`]: serde::Deserialize
21
22mod r#enum;
23mod error;
24mod map;
25mod parse;
26mod position;
27mod seq;
28mod r#struct;
29mod tuple;
30
31pub use error::{Error, Result};
32
33use position::Position;
34use serde::{
35    de,
36    de::{DeserializeOwned, Visitor},
37    Deserialize,
38};
39use std::io::Read;
40
41/// Deserializes data from MSD format.
42///
43/// `Deserializer` can be used to read from any value that implements the [`Read`] trait. The bytes
44/// will be interpreted as MSD and deserialized into a given type.
45///
46/// # Example
47/// ```
48/// use serde::Deserialize;
49/// use std::collections::HashMap;
50///
51/// let mut deserializer = msd::Deserializer::new(b"#foo:1;\n#bar:2;\n".as_slice());
52/// let deserialized = HashMap::deserialize(&mut deserializer).unwrap();
53///
54/// let mut expected: HashMap<String, u64> = HashMap::new();
55/// expected.insert("foo".to_owned(), 1);
56/// expected.insert("bar".to_owned(), 2);
57///
58/// assert_eq!(deserialized, expected);
59/// ```
60#[derive(Debug)]
61pub struct Deserializer<R> {
62    tags: parse::Tags<R>,
63}
64
65impl<R> Deserializer<R> {
66    pub fn new(reader: R) -> Self
67    where
68        R: Read,
69    {
70        Self {
71            tags: parse::Tags::new(reader),
72        }
73    }
74}
75
76impl<'de, 'a, R> de::Deserializer<'de> for &'a mut Deserializer<R>
77where
78    R: Read,
79{
80    type Error = Error;
81
82    fn deserialize_any<V>(self, _visitor: V) -> Result<V::Value>
83    where
84        V: Visitor<'de>,
85    {
86        Err(self
87            .tags
88            .error_at_current_tag(error::Kind::CannotDeserializeAsSelfDescribing))
89    }
90
91    fn deserialize_bool<V>(self, visitor: V) -> Result<V::Value>
92    where
93        V: Visitor<'de>,
94    {
95        let mut tag = self.tags.next()?;
96        let mut values = tag.next()?;
97        let value = values.next()?;
98        let parsed = value.parse_bool()?;
99        let value_position = value.position();
100        values.assert_exhausted()?;
101        tag.assert_exhausted()?;
102        self.tags.assert_exhausted()?;
103        visitor.visit_bool(parsed).map_err(|mut error: Error| {
104            error.set_position(value_position);
105            error
106        })
107    }
108
109    fn deserialize_i8<V>(self, visitor: V) -> Result<V::Value>
110    where
111        V: Visitor<'de>,
112    {
113        let mut tag = self.tags.next()?;
114        let mut values = tag.next()?;
115        let value = values.next()?;
116        let parsed = value.parse_i8()?;
117        let value_position = value.position();
118        values.assert_exhausted()?;
119        tag.assert_exhausted()?;
120        self.tags.assert_exhausted()?;
121        visitor.visit_i8(parsed).map_err(|mut error: Error| {
122            error.set_position(value_position);
123            error
124        })
125    }
126
127    fn deserialize_i16<V>(self, visitor: V) -> Result<V::Value>
128    where
129        V: Visitor<'de>,
130    {
131        let mut tag = self.tags.next()?;
132        let mut values = tag.next()?;
133        let value = values.next()?;
134        let parsed = value.parse_i16()?;
135        let value_position = value.position();
136        values.assert_exhausted()?;
137        tag.assert_exhausted()?;
138        self.tags.assert_exhausted()?;
139        visitor.visit_i16(parsed).map_err(|mut error: Error| {
140            error.set_position(value_position);
141            error
142        })
143    }
144
145    fn deserialize_i32<V>(self, visitor: V) -> Result<V::Value>
146    where
147        V: Visitor<'de>,
148    {
149        let mut tag = self.tags.next()?;
150        let mut values = tag.next()?;
151        let value = values.next()?;
152        let parsed = value.parse_i32()?;
153        let value_position = value.position();
154        values.assert_exhausted()?;
155        tag.assert_exhausted()?;
156        self.tags.assert_exhausted()?;
157        visitor.visit_i32(parsed).map_err(|mut error: Error| {
158            error.set_position(value_position);
159            error
160        })
161    }
162
163    fn deserialize_i64<V>(self, visitor: V) -> Result<V::Value>
164    where
165        V: Visitor<'de>,
166    {
167        let mut tag = self.tags.next()?;
168        let mut values = tag.next()?;
169        let value = values.next()?;
170        let parsed = value.parse_i64()?;
171        let value_position = value.position();
172        values.assert_exhausted()?;
173        tag.assert_exhausted()?;
174        self.tags.assert_exhausted()?;
175        visitor.visit_i64(parsed).map_err(|mut error: Error| {
176            error.set_position(value_position);
177            error
178        })
179    }
180
181    #[cfg(has_i128)]
182    fn deserialize_i128<V>(self, visitor: V) -> Result<V::Value>
183    where
184        V: Visitor<'de>,
185    {
186        let mut tag = self.tags.next()?;
187        let mut values = tag.next()?;
188        let value = values.next()?;
189        let parsed = value.parse_i128()?;
190        let value_position = value.position();
191        values.assert_exhausted()?;
192        tag.assert_exhausted()?;
193        self.tags.assert_exhausted()?;
194        visitor.visit_i128(parsed).map_err(|mut error: Error| {
195            error.set_position(value_position);
196            error
197        })
198    }
199
200    fn deserialize_u8<V>(self, visitor: V) -> Result<V::Value>
201    where
202        V: Visitor<'de>,
203    {
204        let mut tag = self.tags.next()?;
205        let mut values = tag.next()?;
206        let value = values.next()?;
207        let parsed = value.parse_u8()?;
208        let value_position = value.position();
209        values.assert_exhausted()?;
210        tag.assert_exhausted()?;
211        self.tags.assert_exhausted()?;
212        visitor.visit_u8(parsed).map_err(|mut error: Error| {
213            error.set_position(value_position);
214            error
215        })
216    }
217
218    fn deserialize_u16<V>(self, visitor: V) -> Result<V::Value>
219    where
220        V: Visitor<'de>,
221    {
222        let mut tag = self.tags.next()?;
223        let mut values = tag.next()?;
224        let value = values.next()?;
225        let parsed = value.parse_u16()?;
226        let value_position = value.position();
227        values.assert_exhausted()?;
228        tag.assert_exhausted()?;
229        self.tags.assert_exhausted()?;
230        visitor.visit_u16(parsed).map_err(|mut error: Error| {
231            error.set_position(value_position);
232            error
233        })
234    }
235
236    fn deserialize_u32<V>(self, visitor: V) -> Result<V::Value>
237    where
238        V: Visitor<'de>,
239    {
240        let mut tag = self.tags.next()?;
241        let mut values = tag.next()?;
242        let value = values.next()?;
243        let parsed = value.parse_u32()?;
244        let value_position = value.position();
245        values.assert_exhausted()?;
246        tag.assert_exhausted()?;
247        self.tags.assert_exhausted()?;
248        visitor.visit_u32(parsed).map_err(|mut error: Error| {
249            error.set_position(value_position);
250            error
251        })
252    }
253
254    fn deserialize_u64<V>(self, visitor: V) -> Result<V::Value>
255    where
256        V: Visitor<'de>,
257    {
258        let mut tag = self.tags.next()?;
259        let mut values = tag.next()?;
260        let value = values.next()?;
261        let parsed = value.parse_u64()?;
262        let value_position = value.position();
263        values.assert_exhausted()?;
264        tag.assert_exhausted()?;
265        self.tags.assert_exhausted()?;
266        visitor.visit_u64(parsed).map_err(|mut error: Error| {
267            error.set_position(value_position);
268            error
269        })
270    }
271
272    #[cfg(has_i128)]
273    fn deserialize_u128<V>(self, visitor: V) -> Result<V::Value>
274    where
275        V: Visitor<'de>,
276    {
277        let mut tag = self.tags.next()?;
278        let mut values = tag.next()?;
279        let value = values.next()?;
280        let parsed = value.parse_u128()?;
281        let value_position = value.position();
282        values.assert_exhausted()?;
283        tag.assert_exhausted()?;
284        self.tags.assert_exhausted()?;
285        visitor.visit_u128(parsed).map_err(|mut error: Error| {
286            error.set_position(value_position);
287            error
288        })
289    }
290
291    fn deserialize_f32<V>(self, visitor: V) -> Result<V::Value>
292    where
293        V: Visitor<'de>,
294    {
295        let mut tag = self.tags.next()?;
296        let mut values = tag.next()?;
297        let value = values.next()?;
298        let parsed = value.parse_f32()?;
299        let value_position = value.position();
300        values.assert_exhausted()?;
301        tag.assert_exhausted()?;
302        self.tags.assert_exhausted()?;
303        visitor.visit_f32(parsed).map_err(|mut error: Error| {
304            error.set_position(value_position);
305            error
306        })
307    }
308
309    fn deserialize_f64<V>(self, visitor: V) -> Result<V::Value>
310    where
311        V: Visitor<'de>,
312    {
313        let mut tag = self.tags.next()?;
314        let mut values = tag.next()?;
315        let value = values.next()?;
316        let parsed = value.parse_f64()?;
317        let value_position = value.position();
318        values.assert_exhausted()?;
319        tag.assert_exhausted()?;
320        self.tags.assert_exhausted()?;
321        visitor.visit_f64(parsed).map_err(|mut error: Error| {
322            error.set_position(value_position);
323            error
324        })
325    }
326
327    fn deserialize_char<V>(self, visitor: V) -> Result<V::Value>
328    where
329        V: Visitor<'de>,
330    {
331        let mut tag = self.tags.next()?;
332        let mut values = tag.next()?;
333        let value = values.next()?;
334        let parsed = value.parse_char()?;
335        let value_position = value.position();
336        values.assert_exhausted()?;
337        tag.assert_exhausted()?;
338        self.tags.assert_exhausted()?;
339        visitor.visit_char(parsed).map_err(|mut error: Error| {
340            error.set_position(value_position);
341            error
342        })
343    }
344
345    fn deserialize_str<V>(self, visitor: V) -> Result<V::Value>
346    where
347        V: Visitor<'de>,
348    {
349        let mut tag = self.tags.next()?;
350        let mut values = tag.next()?;
351        let value = values.next()?;
352        // Parsed string must be owned, since it removes escaping and comments.
353        let parsed = value.parse_string()?;
354        let value_position = value.position();
355        values.assert_exhausted()?;
356        tag.assert_exhausted()?;
357        self.tags.assert_exhausted()?;
358        visitor.visit_str(&parsed).map_err(|mut error: Error| {
359            error.set_position(value_position);
360            error
361        })
362    }
363
364    fn deserialize_string<V>(self, visitor: V) -> Result<V::Value>
365    where
366        V: Visitor<'de>,
367    {
368        let mut tag = self.tags.next()?;
369        let mut values = tag.next()?;
370        let value = values.next()?;
371        let parsed = value.parse_string()?;
372        let value_position = value.position();
373        values.assert_exhausted()?;
374        tag.assert_exhausted()?;
375        self.tags.assert_exhausted()?;
376        visitor.visit_string(parsed).map_err(|mut error: Error| {
377            error.set_position(value_position);
378            error
379        })
380    }
381
382    fn deserialize_bytes<V>(self, visitor: V) -> Result<V::Value>
383    where
384        V: Visitor<'de>,
385    {
386        let mut tag = self.tags.next()?;
387        let mut values = tag.next()?;
388        let value = values.next()?;
389        // Parsed bytes must be owned, since it removes escaping and comments.
390        let parsed = value.parse_byte_buf();
391        let value_position = value.position();
392        values.assert_exhausted()?;
393        tag.assert_exhausted()?;
394        self.tags.assert_exhausted()?;
395        visitor.visit_bytes(&parsed).map_err(|mut error: Error| {
396            error.set_position(value_position);
397            error
398        })
399    }
400
401    fn deserialize_byte_buf<V>(self, visitor: V) -> Result<V::Value>
402    where
403        V: Visitor<'de>,
404    {
405        let mut tag = self.tags.next()?;
406        let mut values = tag.next()?;
407        let value = values.next()?;
408        let parsed = value.parse_byte_buf();
409        let value_position = value.position();
410        values.assert_exhausted()?;
411        tag.assert_exhausted()?;
412        self.tags.assert_exhausted()?;
413        visitor.visit_byte_buf(parsed).map_err(|mut error: Error| {
414            error.set_position(value_position);
415            error
416        })
417    }
418
419    fn deserialize_option<V>(self, visitor: V) -> Result<V::Value>
420    where
421        V: Visitor<'de>,
422    {
423        if self.tags.has_next()? {
424            visitor.visit_some(self)
425        } else {
426            visitor.visit_none()
427        }
428    }
429
430    fn deserialize_unit<V>(self, visitor: V) -> Result<V::Value>
431    where
432        V: Visitor<'de>,
433    {
434        let mut tag = self.tags.next()?;
435        let mut values = tag.next()?;
436        let value = values.next()?;
437        value.parse_unit()?;
438        let value_position = value.position();
439        values.assert_exhausted()?;
440        tag.assert_exhausted()?;
441        self.tags.assert_exhausted()?;
442        visitor.visit_unit().map_err(|mut error: Error| {
443            error.set_position(value_position);
444            error
445        })
446    }
447
448    fn deserialize_unit_struct<V>(self, _name: &'static str, visitor: V) -> Result<V::Value>
449    where
450        V: Visitor<'de>,
451    {
452        let mut tag = self.tags.next()?;
453        let mut values = tag.next()?;
454        let value = values.next()?;
455        value.parse_unit()?;
456        let value_position = value.position();
457        values.assert_exhausted()?;
458        tag.assert_exhausted()?;
459        self.tags.assert_exhausted()?;
460        visitor.visit_unit().map_err(|mut error: Error| {
461            error.set_position(value_position);
462            error
463        })
464    }
465
466    fn deserialize_newtype_struct<V>(self, _name: &'static str, visitor: V) -> Result<V::Value>
467    where
468        V: Visitor<'de>,
469    {
470        visitor.visit_newtype_struct(self)
471    }
472
473    fn deserialize_seq<V>(self, visitor: V) -> Result<V::Value>
474    where
475        V: Visitor<'de>,
476    {
477        let result = visitor.visit_seq(seq::root::Access::new(&mut self.tags))?;
478        self.tags.assert_exhausted()?;
479        Ok(result)
480    }
481
482    fn deserialize_tuple<V>(self, len: usize, visitor: V) -> Result<V::Value>
483    where
484        V: Visitor<'de>,
485    {
486        let mut tag = self.tags.next()?;
487        let mut values = tag.next()?;
488        let result = visitor.visit_seq(tuple::Access::new(&mut values, len))?;
489        values.assert_exhausted()?;
490        tag.assert_exhausted()?;
491        self.tags.assert_exhausted()?;
492        Ok(result)
493    }
494
495    fn deserialize_tuple_struct<V>(
496        self,
497        _name: &'static str,
498        len: usize,
499        visitor: V,
500    ) -> Result<V::Value>
501    where
502        V: Visitor<'de>,
503    {
504        let mut tag = self.tags.next()?;
505        let mut values = tag.next()?;
506        let result = visitor.visit_seq(tuple::Access::new(&mut values, len))?;
507        values.assert_exhausted()?;
508        tag.assert_exhausted()?;
509        self.tags.assert_exhausted()?;
510        Ok(result)
511    }
512
513    fn deserialize_map<V>(self, visitor: V) -> Result<V::Value>
514    where
515        V: Visitor<'de>,
516    {
517        let result = visitor.visit_map(map::root::Access::new(&mut self.tags))?;
518        self.tags.assert_exhausted()?;
519        Ok(result)
520    }
521
522    fn deserialize_struct<V>(
523        self,
524        _name: &'static str,
525        _fields: &'static [&'static str],
526        visitor: V,
527    ) -> Result<V::Value>
528    where
529        V: Visitor<'de>,
530    {
531        let result = visitor.visit_map(r#struct::root::Access::new(&mut self.tags))?;
532        self.tags.assert_exhausted()?;
533        Ok(result)
534    }
535
536    fn deserialize_enum<V>(
537        self,
538        _name: &'static str,
539        _variants: &'static [&'static str],
540        visitor: V,
541    ) -> Result<V::Value>
542    where
543        V: Visitor<'de>,
544    {
545        let mut tag = self.tags.next()?;
546        let mut values = tag.next()?;
547        let result = visitor.visit_enum(r#enum::Access::new(&mut values))?;
548        values.assert_exhausted()?;
549        tag.assert_exhausted()?;
550        self.tags.assert_exhausted()?;
551        Ok(result)
552    }
553
554    fn deserialize_identifier<V>(self, visitor: V) -> Result<V::Value>
555    where
556        V: Visitor<'de>,
557    {
558        let mut tag = self.tags.next()?;
559        let mut values = tag.next()?;
560        let value = values.next()?;
561        // Parsed string must be owned, since it removes escaping and comments.
562        let parsed = value.parse_identifier()?;
563        let value_position = value.position();
564        values.assert_exhausted()?;
565        tag.assert_exhausted()?;
566        self.tags.assert_exhausted()?;
567        visitor.visit_str(&parsed).map_err(|mut error: Error| {
568            error.set_position(value_position);
569            error
570        })
571    }
572
573    fn deserialize_ignored_any<V>(self, _visitor: V) -> Result<V::Value>
574    where
575        V: Visitor<'de>,
576    {
577        Err(self
578            .tags
579            .error_at_current_tag(error::Kind::CannotDeserializeAsSelfDescribing))
580    }
581}
582
583unsafe impl<R> Send for Deserializer<R> {}
584
585unsafe impl<R> Sync for Deserializer<R> {}
586
587/// Deserialize a value of type `T` from the given `reader`.
588pub fn from_reader<R, T>(reader: R) -> Result<T>
589where
590    R: Read,
591    T: DeserializeOwned,
592{
593    let mut deserializer = Deserializer::new(reader);
594    T::deserialize(&mut deserializer)
595}
596
597/// Deserialize a value of type `T` from a slice of bytes.
598pub fn from_bytes<'a, T>(bytes: &'a [u8]) -> Result<T>
599where
600    T: Deserialize<'a>,
601{
602    let mut deserializer = Deserializer::new(bytes);
603    T::deserialize(&mut deserializer)
604}
605
606#[cfg(test)]
607mod tests {
608    use super::{error, Deserializer, Error, Position};
609    use claims::{assert_err_eq, assert_ok_eq};
610    use serde::{de, de::Visitor, Deserialize};
611    use serde_bytes::ByteBuf;
612    use serde_derive::Deserialize;
613    use std::{collections::HashMap, fmt};
614
615    #[test]
616    fn bool_true() {
617        let mut deserializer = Deserializer::new(b"#true;".as_slice());
618
619        assert_ok_eq!(bool::deserialize(&mut deserializer), true);
620    }
621
622    #[test]
623    fn bool_false() {
624        let mut deserializer = Deserializer::new(b"#false;".as_slice());
625
626        assert_ok_eq!(bool::deserialize(&mut deserializer), false);
627    }
628
629    #[test]
630    fn bool_invalid() {
631        let mut deserializer = Deserializer::new(b"#invalid;".as_slice());
632
633        assert_err_eq!(
634            bool::deserialize(&mut deserializer),
635            Error::new(error::Kind::ExpectedBool, Position::new(0, 1))
636        );
637    }
638
639    #[test]
640    fn bool_custom_error() {
641        #[derive(Debug)]
642        struct CustomBool;
643
644        impl<'de> Deserialize<'de> for CustomBool {
645            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
646            where
647                D: de::Deserializer<'de>,
648            {
649                struct CustomBoolVisitor;
650
651                impl<'de> Visitor<'de> for CustomBoolVisitor {
652                    type Value = CustomBool;
653
654                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
655                        unimplemented!()
656                    }
657
658                    fn visit_bool<E>(self, _value: bool) -> Result<Self::Value, E>
659                    where
660                        E: de::Error,
661                    {
662                        Err(de::Error::custom("foo"))
663                    }
664                }
665
666                deserializer.deserialize_bool(CustomBoolVisitor)
667            }
668        }
669
670        let mut deserializer = Deserializer::new(b"#true;".as_slice());
671
672        assert_err_eq!(
673            CustomBool::deserialize(&mut deserializer),
674            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
675        );
676    }
677
678    #[test]
679    fn i8_positive() {
680        let mut deserializer = Deserializer::new(b"#42;".as_slice());
681
682        assert_ok_eq!(i8::deserialize(&mut deserializer), 42);
683    }
684
685    #[test]
686    fn i8_negative() {
687        let mut deserializer = Deserializer::new(b"#-42;".as_slice());
688
689        assert_ok_eq!(i8::deserialize(&mut deserializer), -42);
690    }
691
692    #[test]
693    fn i8_zero() {
694        let mut deserializer = Deserializer::new(b"#0;".as_slice());
695
696        assert_ok_eq!(i8::deserialize(&mut deserializer), 0);
697    }
698
699    #[test]
700    fn i8_positive_overflow() {
701        let mut deserializer = Deserializer::new(b"#128;".as_slice());
702
703        assert_err_eq!(
704            i8::deserialize(&mut deserializer),
705            Error::new(error::Kind::ExpectedI8, Position::new(0, 1))
706        );
707    }
708
709    #[test]
710    fn i8_negative_overflow() {
711        let mut deserializer = Deserializer::new(b"#-129;".as_slice());
712
713        assert_err_eq!(
714            i8::deserialize(&mut deserializer),
715            Error::new(error::Kind::ExpectedI8, Position::new(0, 1))
716        );
717    }
718
719    #[test]
720    fn i8_invalid() {
721        let mut deserializer = Deserializer::new(b"#invalid;".as_slice());
722
723        assert_err_eq!(
724            i8::deserialize(&mut deserializer),
725            Error::new(error::Kind::ExpectedI8, Position::new(0, 1))
726        );
727    }
728
729    #[test]
730    fn i8_custom_error() {
731        #[derive(Debug)]
732        struct CustomI8;
733
734        impl<'de> Deserialize<'de> for CustomI8 {
735            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
736            where
737                D: de::Deserializer<'de>,
738            {
739                struct CustomI8Visitor;
740
741                impl<'de> Visitor<'de> for CustomI8Visitor {
742                    type Value = CustomI8;
743
744                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
745                        unimplemented!()
746                    }
747
748                    fn visit_i8<E>(self, _value: i8) -> Result<Self::Value, E>
749                    where
750                        E: de::Error,
751                    {
752                        Err(de::Error::custom("foo"))
753                    }
754                }
755
756                deserializer.deserialize_i8(CustomI8Visitor)
757            }
758        }
759
760        let mut deserializer = Deserializer::new(b"#42;".as_slice());
761
762        assert_err_eq!(
763            CustomI8::deserialize(&mut deserializer),
764            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
765        );
766    }
767
768    #[test]
769    fn i16_positive() {
770        let mut deserializer = Deserializer::new(b"#42;".as_slice());
771
772        assert_ok_eq!(i16::deserialize(&mut deserializer), 42);
773    }
774
775    #[test]
776    fn i16_negative() {
777        let mut deserializer = Deserializer::new(b"#-42;".as_slice());
778
779        assert_ok_eq!(i16::deserialize(&mut deserializer), -42);
780    }
781
782    #[test]
783    fn i16_zero() {
784        let mut deserializer = Deserializer::new(b"#0;".as_slice());
785
786        assert_ok_eq!(i16::deserialize(&mut deserializer), 0);
787    }
788
789    #[test]
790    fn i16_positive_overflow() {
791        let mut deserializer = Deserializer::new(b"#32768;".as_slice());
792
793        assert_err_eq!(
794            i16::deserialize(&mut deserializer),
795            Error::new(error::Kind::ExpectedI16, Position::new(0, 1))
796        );
797    }
798
799    #[test]
800    fn i16_negative_overflow() {
801        let mut deserializer = Deserializer::new(b"#-32769;".as_slice());
802
803        assert_err_eq!(
804            i16::deserialize(&mut deserializer),
805            Error::new(error::Kind::ExpectedI16, Position::new(0, 1))
806        );
807    }
808
809    #[test]
810    fn i16_invalid() {
811        let mut deserializer = Deserializer::new(b"#invalid;".as_slice());
812
813        assert_err_eq!(
814            i16::deserialize(&mut deserializer),
815            Error::new(error::Kind::ExpectedI16, Position::new(0, 1))
816        );
817    }
818
819    #[test]
820    fn i16_custom_error() {
821        #[derive(Debug)]
822        struct CustomI16;
823
824        impl<'de> Deserialize<'de> for CustomI16 {
825            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
826            where
827                D: de::Deserializer<'de>,
828            {
829                struct CustomI16Visitor;
830
831                impl<'de> Visitor<'de> for CustomI16Visitor {
832                    type Value = CustomI16;
833
834                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
835                        unimplemented!()
836                    }
837
838                    fn visit_i16<E>(self, _value: i16) -> Result<Self::Value, E>
839                    where
840                        E: de::Error,
841                    {
842                        Err(de::Error::custom("foo"))
843                    }
844                }
845
846                deserializer.deserialize_i16(CustomI16Visitor)
847            }
848        }
849
850        let mut deserializer = Deserializer::new(b"#42;".as_slice());
851
852        assert_err_eq!(
853            CustomI16::deserialize(&mut deserializer),
854            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
855        );
856    }
857
858    #[test]
859    fn i32_positive() {
860        let mut deserializer = Deserializer::new(b"#42;".as_slice());
861
862        assert_ok_eq!(i32::deserialize(&mut deserializer), 42);
863    }
864
865    #[test]
866    fn i32_negative() {
867        let mut deserializer = Deserializer::new(b"#-42;".as_slice());
868
869        assert_ok_eq!(i32::deserialize(&mut deserializer), -42);
870    }
871
872    #[test]
873    fn i32_zero() {
874        let mut deserializer = Deserializer::new(b"#0;".as_slice());
875
876        assert_ok_eq!(i32::deserialize(&mut deserializer), 0);
877    }
878
879    #[test]
880    fn i32_positive_overflow() {
881        let mut deserializer = Deserializer::new(b"#2147483648;".as_slice());
882
883        assert_err_eq!(
884            i32::deserialize(&mut deserializer),
885            Error::new(error::Kind::ExpectedI32, Position::new(0, 1))
886        );
887    }
888
889    #[test]
890    fn i32_negative_overflow() {
891        let mut deserializer = Deserializer::new(b"#-2147483649;".as_slice());
892
893        assert_err_eq!(
894            i32::deserialize(&mut deserializer),
895            Error::new(error::Kind::ExpectedI32, Position::new(0, 1))
896        );
897    }
898
899    #[test]
900    fn i32_invalid() {
901        let mut deserializer = Deserializer::new(b"#invalid;".as_slice());
902
903        assert_err_eq!(
904            i32::deserialize(&mut deserializer),
905            Error::new(error::Kind::ExpectedI32, Position::new(0, 1))
906        );
907    }
908
909    #[test]
910    fn i32_custom_error() {
911        #[derive(Debug)]
912        struct CustomI32;
913
914        impl<'de> Deserialize<'de> for CustomI32 {
915            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
916            where
917                D: de::Deserializer<'de>,
918            {
919                struct CustomI32Visitor;
920
921                impl<'de> Visitor<'de> for CustomI32Visitor {
922                    type Value = CustomI32;
923
924                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
925                        unimplemented!()
926                    }
927
928                    fn visit_i32<E>(self, _value: i32) -> Result<Self::Value, E>
929                    where
930                        E: de::Error,
931                    {
932                        Err(de::Error::custom("foo"))
933                    }
934                }
935
936                deserializer.deserialize_i32(CustomI32Visitor)
937            }
938        }
939
940        let mut deserializer = Deserializer::new(b"#42;".as_slice());
941
942        assert_err_eq!(
943            CustomI32::deserialize(&mut deserializer),
944            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
945        );
946    }
947
948    #[test]
949    fn i64_positive() {
950        let mut deserializer = Deserializer::new(b"#42;".as_slice());
951
952        assert_ok_eq!(i64::deserialize(&mut deserializer), 42);
953    }
954
955    #[test]
956    fn i64_negative() {
957        let mut deserializer = Deserializer::new(b"#-42;".as_slice());
958
959        assert_ok_eq!(i64::deserialize(&mut deserializer), -42);
960    }
961
962    #[test]
963    fn i64_zero() {
964        let mut deserializer = Deserializer::new(b"#0;".as_slice());
965
966        assert_ok_eq!(i64::deserialize(&mut deserializer), 0);
967    }
968
969    #[test]
970    fn i64_positive_overflow() {
971        let mut deserializer = Deserializer::new(b"#9223372036854775808;".as_slice());
972
973        assert_err_eq!(
974            i64::deserialize(&mut deserializer),
975            Error::new(error::Kind::ExpectedI64, Position::new(0, 1))
976        );
977    }
978
979    #[test]
980    fn i64_negative_overflow() {
981        let mut deserializer = Deserializer::new(b"#-9223372036854775809;".as_slice());
982
983        assert_err_eq!(
984            i64::deserialize(&mut deserializer),
985            Error::new(error::Kind::ExpectedI64, Position::new(0, 1))
986        );
987    }
988
989    #[test]
990    fn i64_invalid() {
991        let mut deserializer = Deserializer::new(b"#invalid;".as_slice());
992
993        assert_err_eq!(
994            i64::deserialize(&mut deserializer),
995            Error::new(error::Kind::ExpectedI64, Position::new(0, 1))
996        );
997    }
998
999    #[test]
1000    fn i64_custom_error() {
1001        #[derive(Debug)]
1002        struct CustomI64;
1003
1004        impl<'de> Deserialize<'de> for CustomI64 {
1005            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1006            where
1007                D: de::Deserializer<'de>,
1008            {
1009                struct CustomI64Visitor;
1010
1011                impl<'de> Visitor<'de> for CustomI64Visitor {
1012                    type Value = CustomI64;
1013
1014                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
1015                        unimplemented!()
1016                    }
1017
1018                    fn visit_i64<E>(self, _value: i64) -> Result<Self::Value, E>
1019                    where
1020                        E: de::Error,
1021                    {
1022                        Err(de::Error::custom("foo"))
1023                    }
1024                }
1025
1026                deserializer.deserialize_i64(CustomI64Visitor)
1027            }
1028        }
1029
1030        let mut deserializer = Deserializer::new(b"#42;".as_slice());
1031
1032        assert_err_eq!(
1033            CustomI64::deserialize(&mut deserializer),
1034            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
1035        );
1036    }
1037
1038    #[test]
1039    fn i128_positive() {
1040        let mut deserializer = Deserializer::new(b"#42;".as_slice());
1041
1042        assert_ok_eq!(i128::deserialize(&mut deserializer), 42);
1043    }
1044
1045    #[test]
1046    fn i128_negative() {
1047        let mut deserializer = Deserializer::new(b"#-42;".as_slice());
1048
1049        assert_ok_eq!(i128::deserialize(&mut deserializer), -42);
1050    }
1051
1052    #[test]
1053    fn i128_zero() {
1054        let mut deserializer = Deserializer::new(b"#0;".as_slice());
1055
1056        assert_ok_eq!(i128::deserialize(&mut deserializer), 0);
1057    }
1058
1059    #[test]
1060    fn i128_positive_overflow() {
1061        let mut deserializer =
1062            Deserializer::new(b"#170141183460469231731687303715884105728;".as_slice());
1063
1064        assert_err_eq!(
1065            i128::deserialize(&mut deserializer),
1066            Error::new(error::Kind::ExpectedI128, Position::new(0, 1))
1067        );
1068    }
1069
1070    #[test]
1071    fn i128_negative_overflow() {
1072        let mut deserializer =
1073            Deserializer::new(b"#-170141183460469231731687303715884105729;".as_slice());
1074
1075        assert_err_eq!(
1076            i128::deserialize(&mut deserializer),
1077            Error::new(error::Kind::ExpectedI128, Position::new(0, 1))
1078        );
1079    }
1080
1081    #[test]
1082    fn i128_invalid() {
1083        let mut deserializer = Deserializer::new(b"#invalid;".as_slice());
1084
1085        assert_err_eq!(
1086            i128::deserialize(&mut deserializer),
1087            Error::new(error::Kind::ExpectedI128, Position::new(0, 1))
1088        );
1089    }
1090
1091    #[test]
1092    fn i128_custom_error() {
1093        #[derive(Debug)]
1094        struct CustomI128;
1095
1096        impl<'de> Deserialize<'de> for CustomI128 {
1097            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1098            where
1099                D: de::Deserializer<'de>,
1100            {
1101                struct CustomI128Visitor;
1102
1103                impl<'de> Visitor<'de> for CustomI128Visitor {
1104                    type Value = CustomI128;
1105
1106                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
1107                        unimplemented!()
1108                    }
1109
1110                    fn visit_i128<E>(self, _value: i128) -> Result<Self::Value, E>
1111                    where
1112                        E: de::Error,
1113                    {
1114                        Err(de::Error::custom("foo"))
1115                    }
1116                }
1117
1118                deserializer.deserialize_i128(CustomI128Visitor)
1119            }
1120        }
1121
1122        let mut deserializer = Deserializer::new(b"#42;".as_slice());
1123
1124        assert_err_eq!(
1125            CustomI128::deserialize(&mut deserializer),
1126            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
1127        );
1128    }
1129
1130    #[test]
1131    fn u8() {
1132        let mut deserializer = Deserializer::new(b"#42;".as_slice());
1133
1134        assert_ok_eq!(u8::deserialize(&mut deserializer), 42);
1135    }
1136
1137    #[test]
1138    fn u8_zero() {
1139        let mut deserializer = Deserializer::new(b"#0;".as_slice());
1140
1141        assert_ok_eq!(u8::deserialize(&mut deserializer), 0);
1142    }
1143
1144    #[test]
1145    fn u8_overflow() {
1146        let mut deserializer = Deserializer::new(b"#256;".as_slice());
1147
1148        assert_err_eq!(
1149            u8::deserialize(&mut deserializer),
1150            Error::new(error::Kind::ExpectedU8, Position::new(0, 1))
1151        );
1152    }
1153
1154    #[test]
1155    fn u8_invalid() {
1156        let mut deserializer = Deserializer::new(b"#invalid;".as_slice());
1157
1158        assert_err_eq!(
1159            u8::deserialize(&mut deserializer),
1160            Error::new(error::Kind::ExpectedU8, Position::new(0, 1))
1161        );
1162    }
1163
1164    #[test]
1165    fn u8_custom_error() {
1166        #[derive(Debug)]
1167        struct CustomU8;
1168
1169        impl<'de> Deserialize<'de> for CustomU8 {
1170            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1171            where
1172                D: de::Deserializer<'de>,
1173            {
1174                struct CustomU8Visitor;
1175
1176                impl<'de> Visitor<'de> for CustomU8Visitor {
1177                    type Value = CustomU8;
1178
1179                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
1180                        unimplemented!()
1181                    }
1182
1183                    fn visit_u8<E>(self, _value: u8) -> Result<Self::Value, E>
1184                    where
1185                        E: de::Error,
1186                    {
1187                        Err(de::Error::custom("foo"))
1188                    }
1189                }
1190
1191                deserializer.deserialize_u8(CustomU8Visitor)
1192            }
1193        }
1194
1195        let mut deserializer = Deserializer::new(b"#42;".as_slice());
1196
1197        assert_err_eq!(
1198            CustomU8::deserialize(&mut deserializer),
1199            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
1200        );
1201    }
1202
1203    #[test]
1204    fn u16() {
1205        let mut deserializer = Deserializer::new(b"#42;".as_slice());
1206
1207        assert_ok_eq!(u16::deserialize(&mut deserializer), 42);
1208    }
1209
1210    #[test]
1211    fn u16_zero() {
1212        let mut deserializer = Deserializer::new(b"#0;".as_slice());
1213
1214        assert_ok_eq!(u16::deserialize(&mut deserializer), 0);
1215    }
1216
1217    #[test]
1218    fn u16_overflow() {
1219        let mut deserializer = Deserializer::new(b"#65536;".as_slice());
1220
1221        assert_err_eq!(
1222            u16::deserialize(&mut deserializer),
1223            Error::new(error::Kind::ExpectedU16, Position::new(0, 1))
1224        );
1225    }
1226
1227    #[test]
1228    fn u16_invalid() {
1229        let mut deserializer = Deserializer::new(b"#invalid;".as_slice());
1230
1231        assert_err_eq!(
1232            u16::deserialize(&mut deserializer),
1233            Error::new(error::Kind::ExpectedU16, Position::new(0, 1))
1234        );
1235    }
1236
1237    #[test]
1238    fn u16_custom_error() {
1239        #[derive(Debug)]
1240        struct CustomU16;
1241
1242        impl<'de> Deserialize<'de> for CustomU16 {
1243            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1244            where
1245                D: de::Deserializer<'de>,
1246            {
1247                struct CustomU16Visitor;
1248
1249                impl<'de> Visitor<'de> for CustomU16Visitor {
1250                    type Value = CustomU16;
1251
1252                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
1253                        unimplemented!()
1254                    }
1255
1256                    fn visit_u16<E>(self, _value: u16) -> Result<Self::Value, E>
1257                    where
1258                        E: de::Error,
1259                    {
1260                        Err(de::Error::custom("foo"))
1261                    }
1262                }
1263
1264                deserializer.deserialize_u16(CustomU16Visitor)
1265            }
1266        }
1267
1268        let mut deserializer = Deserializer::new(b"#42;".as_slice());
1269
1270        assert_err_eq!(
1271            CustomU16::deserialize(&mut deserializer),
1272            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
1273        );
1274    }
1275
1276    #[test]
1277    fn u32() {
1278        let mut deserializer = Deserializer::new(b"#42;".as_slice());
1279
1280        assert_ok_eq!(u32::deserialize(&mut deserializer), 42);
1281    }
1282
1283    #[test]
1284    fn u32_zero() {
1285        let mut deserializer = Deserializer::new(b"#0;".as_slice());
1286
1287        assert_ok_eq!(u32::deserialize(&mut deserializer), 0);
1288    }
1289
1290    #[test]
1291    fn u32_overflow() {
1292        let mut deserializer = Deserializer::new(b"#4294967296;".as_slice());
1293
1294        assert_err_eq!(
1295            u32::deserialize(&mut deserializer),
1296            Error::new(error::Kind::ExpectedU32, Position::new(0, 1))
1297        );
1298    }
1299
1300    #[test]
1301    fn u32_invalid() {
1302        let mut deserializer = Deserializer::new(b"#invalid;".as_slice());
1303
1304        assert_err_eq!(
1305            u32::deserialize(&mut deserializer),
1306            Error::new(error::Kind::ExpectedU32, Position::new(0, 1))
1307        );
1308    }
1309
1310    #[test]
1311    fn u32_custom_error() {
1312        #[derive(Debug)]
1313        struct CustomU32;
1314
1315        impl<'de> Deserialize<'de> for CustomU32 {
1316            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1317            where
1318                D: de::Deserializer<'de>,
1319            {
1320                struct CustomU32Visitor;
1321
1322                impl<'de> Visitor<'de> for CustomU32Visitor {
1323                    type Value = CustomU32;
1324
1325                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
1326                        unimplemented!()
1327                    }
1328
1329                    fn visit_u32<E>(self, _value: u32) -> Result<Self::Value, E>
1330                    where
1331                        E: de::Error,
1332                    {
1333                        Err(de::Error::custom("foo"))
1334                    }
1335                }
1336
1337                deserializer.deserialize_u32(CustomU32Visitor)
1338            }
1339        }
1340
1341        let mut deserializer = Deserializer::new(b"#42;".as_slice());
1342
1343        assert_err_eq!(
1344            CustomU32::deserialize(&mut deserializer),
1345            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
1346        );
1347    }
1348
1349    #[test]
1350    fn u64() {
1351        let mut deserializer = Deserializer::new(b"#42;".as_slice());
1352
1353        assert_ok_eq!(u64::deserialize(&mut deserializer), 42);
1354    }
1355
1356    #[test]
1357    fn u64_zero() {
1358        let mut deserializer = Deserializer::new(b"#0;".as_slice());
1359
1360        assert_ok_eq!(u64::deserialize(&mut deserializer), 0);
1361    }
1362
1363    #[test]
1364    fn u64_overflow() {
1365        let mut deserializer = Deserializer::new(b"#18446744073709551616;".as_slice());
1366
1367        assert_err_eq!(
1368            u64::deserialize(&mut deserializer),
1369            Error::new(error::Kind::ExpectedU64, Position::new(0, 1))
1370        );
1371    }
1372
1373    #[test]
1374    fn u64_invalid() {
1375        let mut deserializer = Deserializer::new(b"#invalid;".as_slice());
1376
1377        assert_err_eq!(
1378            u64::deserialize(&mut deserializer),
1379            Error::new(error::Kind::ExpectedU64, Position::new(0, 1))
1380        );
1381    }
1382
1383    #[test]
1384    fn u64_custom_error() {
1385        #[derive(Debug)]
1386        struct CustomU64;
1387
1388        impl<'de> Deserialize<'de> for CustomU64 {
1389            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1390            where
1391                D: de::Deserializer<'de>,
1392            {
1393                struct CustomU64Visitor;
1394
1395                impl<'de> Visitor<'de> for CustomU64Visitor {
1396                    type Value = CustomU64;
1397
1398                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
1399                        unimplemented!()
1400                    }
1401
1402                    fn visit_u64<E>(self, _value: u64) -> Result<Self::Value, E>
1403                    where
1404                        E: de::Error,
1405                    {
1406                        Err(de::Error::custom("foo"))
1407                    }
1408                }
1409
1410                deserializer.deserialize_u64(CustomU64Visitor)
1411            }
1412        }
1413
1414        let mut deserializer = Deserializer::new(b"#42;".as_slice());
1415
1416        assert_err_eq!(
1417            CustomU64::deserialize(&mut deserializer),
1418            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
1419        );
1420    }
1421
1422    #[test]
1423    fn u128() {
1424        let mut deserializer = Deserializer::new(b"#42;".as_slice());
1425
1426        assert_ok_eq!(u128::deserialize(&mut deserializer), 42);
1427    }
1428
1429    #[test]
1430    fn u128_zero() {
1431        let mut deserializer = Deserializer::new(b"#0;".as_slice());
1432
1433        assert_ok_eq!(u128::deserialize(&mut deserializer), 0);
1434    }
1435
1436    #[test]
1437    fn u128_overflow() {
1438        let mut deserializer =
1439            Deserializer::new(b"#340282366920938463463374607431768211456;".as_slice());
1440
1441        assert_err_eq!(
1442            u128::deserialize(&mut deserializer),
1443            Error::new(error::Kind::ExpectedU128, Position::new(0, 1))
1444        );
1445    }
1446
1447    #[test]
1448    fn u128_invalid() {
1449        let mut deserializer = Deserializer::new(b"#invalid;".as_slice());
1450
1451        assert_err_eq!(
1452            u128::deserialize(&mut deserializer),
1453            Error::new(error::Kind::ExpectedU128, Position::new(0, 1))
1454        );
1455    }
1456
1457    #[test]
1458    fn u128_custom_error() {
1459        #[derive(Debug)]
1460        struct CustomU128;
1461
1462        impl<'de> Deserialize<'de> for CustomU128 {
1463            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1464            where
1465                D: de::Deserializer<'de>,
1466            {
1467                struct CustomU128Visitor;
1468
1469                impl<'de> Visitor<'de> for CustomU128Visitor {
1470                    type Value = CustomU128;
1471
1472                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
1473                        unimplemented!()
1474                    }
1475
1476                    fn visit_u128<E>(self, _value: u128) -> Result<Self::Value, E>
1477                    where
1478                        E: de::Error,
1479                    {
1480                        Err(de::Error::custom("foo"))
1481                    }
1482                }
1483
1484                deserializer.deserialize_u128(CustomU128Visitor)
1485            }
1486        }
1487
1488        let mut deserializer = Deserializer::new(b"#42;".as_slice());
1489
1490        assert_err_eq!(
1491            CustomU128::deserialize(&mut deserializer),
1492            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
1493        );
1494    }
1495
1496    #[test]
1497    fn f32_positive() {
1498        let mut deserializer = Deserializer::new(b"#42.9;".as_slice());
1499
1500        assert_ok_eq!(f32::deserialize(&mut deserializer), 42.9);
1501    }
1502
1503    #[test]
1504    fn f32_negative() {
1505        let mut deserializer = Deserializer::new(b"#-42.9;".as_slice());
1506
1507        assert_ok_eq!(f32::deserialize(&mut deserializer), -42.9);
1508    }
1509
1510    #[test]
1511    fn f32_zero() {
1512        let mut deserializer = Deserializer::new(b"#0;".as_slice());
1513
1514        assert_ok_eq!(f32::deserialize(&mut deserializer), 0.0);
1515    }
1516
1517    #[test]
1518    fn f32_positive_overflow() {
1519        let mut deserializer = Deserializer::new(b"#3.40282347E+39;".as_slice());
1520
1521        assert_ok_eq!(f32::deserialize(&mut deserializer), f32::INFINITY,);
1522    }
1523
1524    #[test]
1525    fn f32_negative_overflow() {
1526        let mut deserializer = Deserializer::new(b"#-3.40282347E+39;".as_slice());
1527
1528        assert_ok_eq!(f32::deserialize(&mut deserializer), f32::NEG_INFINITY);
1529    }
1530
1531    #[test]
1532    fn f32_invalid() {
1533        let mut deserializer = Deserializer::new(b"#invalid;".as_slice());
1534
1535        assert_err_eq!(
1536            f32::deserialize(&mut deserializer),
1537            Error::new(error::Kind::ExpectedF32, Position::new(0, 1))
1538        );
1539    }
1540
1541    #[test]
1542    fn f32_custom_error() {
1543        #[derive(Debug)]
1544        struct CustomF32;
1545
1546        impl<'de> Deserialize<'de> for CustomF32 {
1547            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1548            where
1549                D: de::Deserializer<'de>,
1550            {
1551                struct CustomF32Visitor;
1552
1553                impl<'de> Visitor<'de> for CustomF32Visitor {
1554                    type Value = CustomF32;
1555
1556                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
1557                        unimplemented!()
1558                    }
1559
1560                    fn visit_f32<E>(self, _value: f32) -> Result<Self::Value, E>
1561                    where
1562                        E: de::Error,
1563                    {
1564                        Err(de::Error::custom("foo"))
1565                    }
1566                }
1567
1568                deserializer.deserialize_f32(CustomF32Visitor)
1569            }
1570        }
1571
1572        let mut deserializer = Deserializer::new(b"#42;".as_slice());
1573
1574        assert_err_eq!(
1575            CustomF32::deserialize(&mut deserializer),
1576            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
1577        );
1578    }
1579
1580    #[test]
1581    fn f64_positive() {
1582        let mut deserializer = Deserializer::new(b"#42.9;".as_slice());
1583
1584        assert_ok_eq!(f64::deserialize(&mut deserializer), 42.9);
1585    }
1586
1587    #[test]
1588    fn f64_negative() {
1589        let mut deserializer = Deserializer::new(b"#-42.9;".as_slice());
1590
1591        assert_ok_eq!(f64::deserialize(&mut deserializer), -42.9);
1592    }
1593
1594    #[test]
1595    fn f64_zero() {
1596        let mut deserializer = Deserializer::new(b"#0;".as_slice());
1597
1598        assert_ok_eq!(f64::deserialize(&mut deserializer), 0.0);
1599    }
1600
1601    #[test]
1602    fn f64_positive_overflow() {
1603        let mut deserializer = Deserializer::new(b"#1.7976931348623157E+309;".as_slice());
1604
1605        assert_ok_eq!(f64::deserialize(&mut deserializer), f64::INFINITY,);
1606    }
1607
1608    #[test]
1609    fn f64_negative_overflow() {
1610        let mut deserializer = Deserializer::new(b"#-1.7976931348623157E+309;".as_slice());
1611
1612        assert_ok_eq!(f64::deserialize(&mut deserializer), f64::NEG_INFINITY);
1613    }
1614
1615    #[test]
1616    fn f64_invalid() {
1617        let mut deserializer = Deserializer::new(b"#invalid;".as_slice());
1618
1619        assert_err_eq!(
1620            f64::deserialize(&mut deserializer),
1621            Error::new(error::Kind::ExpectedF64, Position::new(0, 1))
1622        );
1623    }
1624
1625    #[test]
1626    fn f64_custom_error() {
1627        #[derive(Debug)]
1628        struct CustomF64;
1629
1630        impl<'de> Deserialize<'de> for CustomF64 {
1631            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1632            where
1633                D: de::Deserializer<'de>,
1634            {
1635                struct CustomF64Visitor;
1636
1637                impl<'de> Visitor<'de> for CustomF64Visitor {
1638                    type Value = CustomF64;
1639
1640                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
1641                        unimplemented!()
1642                    }
1643
1644                    fn visit_f64<E>(self, _value: f64) -> Result<Self::Value, E>
1645                    where
1646                        E: de::Error,
1647                    {
1648                        Err(de::Error::custom("foo"))
1649                    }
1650                }
1651
1652                deserializer.deserialize_f64(CustomF64Visitor)
1653            }
1654        }
1655
1656        let mut deserializer = Deserializer::new(b"#42;".as_slice());
1657
1658        assert_err_eq!(
1659            CustomF64::deserialize(&mut deserializer),
1660            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
1661        );
1662    }
1663
1664    #[test]
1665    fn char() {
1666        let mut deserializer = Deserializer::new(b"#a;".as_slice());
1667
1668        assert_ok_eq!(char::deserialize(&mut deserializer), 'a');
1669    }
1670
1671    #[test]
1672    fn char_empty() {
1673        let mut deserializer = Deserializer::new(b"".as_slice());
1674
1675        assert_err_eq!(
1676            char::deserialize(&mut deserializer),
1677            Error::new(error::Kind::EndOfFile, Position::new(0, 0))
1678        );
1679    }
1680
1681    #[test]
1682    fn char_unexpected_tag() {
1683        let mut deserializer = Deserializer::new(b"#a;#b;".as_slice());
1684
1685        assert_err_eq!(
1686            char::deserialize(&mut deserializer),
1687            Error::new(error::Kind::UnexpectedTag, Position::new(0, 3))
1688        );
1689    }
1690
1691    #[test]
1692    fn char_unexpected_values() {
1693        let mut deserializer = Deserializer::new(b"#a;b;".as_slice());
1694
1695        assert_err_eq!(
1696            char::deserialize(&mut deserializer),
1697            Error::new(error::Kind::UnexpectedValues, Position::new(0, 3))
1698        );
1699    }
1700
1701    #[test]
1702    fn char_unexpected_value() {
1703        let mut deserializer = Deserializer::new(b"#a:b;\n".as_slice());
1704
1705        assert_err_eq!(
1706            char::deserialize(&mut deserializer),
1707            Error::new(error::Kind::UnexpectedValue, Position::new(0, 3))
1708        );
1709    }
1710
1711    #[test]
1712    fn char_invalid() {
1713        let mut deserializer = Deserializer::new(b"#abc;\n".as_slice());
1714
1715        assert_err_eq!(
1716            char::deserialize(&mut deserializer),
1717            Error::new(error::Kind::ExpectedChar, Position::new(0, 1)),
1718        );
1719    }
1720
1721    #[test]
1722    fn char_custom_error() {
1723        #[derive(Debug)]
1724        struct CustomChar;
1725
1726        impl<'de> Deserialize<'de> for CustomChar {
1727            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1728            where
1729                D: de::Deserializer<'de>,
1730            {
1731                struct CustomCharVisitor;
1732
1733                impl<'de> Visitor<'de> for CustomCharVisitor {
1734                    type Value = CustomChar;
1735
1736                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
1737                        unimplemented!()
1738                    }
1739
1740                    fn visit_char<E>(self, _value: char) -> Result<Self::Value, E>
1741                    where
1742                        E: de::Error,
1743                    {
1744                        Err(de::Error::custom("foo"))
1745                    }
1746                }
1747
1748                deserializer.deserialize_char(CustomCharVisitor)
1749            }
1750        }
1751
1752        let mut deserializer = Deserializer::new(b"#a;".as_slice());
1753
1754        assert_err_eq!(
1755            CustomChar::deserialize(&mut deserializer),
1756            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
1757        );
1758    }
1759
1760    #[derive(Debug, PartialEq)]
1761    struct Str(String);
1762
1763    impl<'de> Deserialize<'de> for Str {
1764        fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1765        where
1766            D: de::Deserializer<'de>,
1767        {
1768            struct StrVisitor;
1769
1770            impl<'de> Visitor<'de> for StrVisitor {
1771                type Value = Str;
1772
1773                fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
1774                    unimplemented!()
1775                }
1776
1777                fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
1778                where
1779                    E: de::Error,
1780                {
1781                    Ok(Str(value.to_owned()))
1782                }
1783            }
1784
1785            deserializer.deserialize_str(StrVisitor)
1786        }
1787    }
1788
1789    #[test]
1790    fn str() {
1791        let mut deserializer = Deserializer::new(b"#foo;".as_slice());
1792
1793        assert_ok_eq!(Str::deserialize(&mut deserializer), Str("foo".to_string()));
1794    }
1795
1796    #[test]
1797    fn str_unexpected_tag() {
1798        let mut deserializer = Deserializer::new(b"#foo;#bar;".as_slice());
1799
1800        assert_err_eq!(
1801            Str::deserialize(&mut deserializer),
1802            Error::new(error::Kind::UnexpectedTag, Position::new(0, 5))
1803        );
1804    }
1805
1806    #[test]
1807    fn str_unexpected_values() {
1808        let mut deserializer = Deserializer::new(b"#foo;bar;".as_slice());
1809
1810        assert_err_eq!(
1811            Str::deserialize(&mut deserializer),
1812            Error::new(error::Kind::UnexpectedValues, Position::new(0, 5))
1813        );
1814    }
1815
1816    #[test]
1817    fn str_unexpected_value() {
1818        let mut deserializer = Deserializer::new(b"#foo:bar;\n".as_slice());
1819
1820        assert_err_eq!(
1821            Str::deserialize(&mut deserializer),
1822            Error::new(error::Kind::UnexpectedValue, Position::new(0, 5))
1823        );
1824    }
1825
1826    #[test]
1827    fn str_invalid() {
1828        let mut deserializer = Deserializer::new(b"#\xF0\x9Ffoo;\n".as_slice());
1829
1830        assert_err_eq!(
1831            Str::deserialize(&mut deserializer),
1832            Error::new(error::Kind::ExpectedString, Position::new(0, 1)),
1833        );
1834    }
1835
1836    #[test]
1837    fn str_custom_error() {
1838        #[derive(Debug)]
1839        struct CustomStr;
1840
1841        impl<'de> Deserialize<'de> for CustomStr {
1842            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1843            where
1844                D: de::Deserializer<'de>,
1845            {
1846                struct CustomStrVisitor;
1847
1848                impl<'de> Visitor<'de> for CustomStrVisitor {
1849                    type Value = CustomStr;
1850
1851                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
1852                        unimplemented!()
1853                    }
1854
1855                    fn visit_str<E>(self, _value: &str) -> Result<Self::Value, E>
1856                    where
1857                        E: de::Error,
1858                    {
1859                        Err(de::Error::custom("foo"))
1860                    }
1861                }
1862
1863                deserializer.deserialize_str(CustomStrVisitor)
1864            }
1865        }
1866
1867        let mut deserializer = Deserializer::new(b"#a;".as_slice());
1868
1869        assert_err_eq!(
1870            CustomStr::deserialize(&mut deserializer),
1871            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
1872        );
1873    }
1874
1875    #[test]
1876    fn string() {
1877        let mut deserializer = Deserializer::new(b"#foo;".as_slice());
1878
1879        assert_ok_eq!(String::deserialize(&mut deserializer), "foo".to_string());
1880    }
1881
1882    #[test]
1883    fn string_unexpected_tag() {
1884        let mut deserializer = Deserializer::new(b"#foo;#bar;".as_slice());
1885
1886        assert_err_eq!(
1887            String::deserialize(&mut deserializer),
1888            Error::new(error::Kind::UnexpectedTag, Position::new(0, 5))
1889        );
1890    }
1891
1892    #[test]
1893    fn string_unexpected_values() {
1894        let mut deserializer = Deserializer::new(b"#foo;bar;".as_slice());
1895
1896        assert_err_eq!(
1897            String::deserialize(&mut deserializer),
1898            Error::new(error::Kind::UnexpectedValues, Position::new(0, 5))
1899        );
1900    }
1901
1902    #[test]
1903    fn string_unexpected_value() {
1904        let mut deserializer = Deserializer::new(b"#foo:bar;\n".as_slice());
1905
1906        assert_err_eq!(
1907            String::deserialize(&mut deserializer),
1908            Error::new(error::Kind::UnexpectedValue, Position::new(0, 5))
1909        );
1910    }
1911
1912    #[test]
1913    fn string_invalid() {
1914        let mut deserializer = Deserializer::new(b"#\xF0\x9Ffoo;\n".as_slice());
1915
1916        assert_err_eq!(
1917            String::deserialize(&mut deserializer),
1918            Error::new(error::Kind::ExpectedString, Position::new(0, 1)),
1919        );
1920    }
1921
1922    #[test]
1923    fn string_custom_error() {
1924        #[derive(Debug)]
1925        struct CustomString;
1926
1927        impl<'de> Deserialize<'de> for CustomString {
1928            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1929            where
1930                D: de::Deserializer<'de>,
1931            {
1932                struct CustomStringVisitor;
1933
1934                impl<'de> Visitor<'de> for CustomStringVisitor {
1935                    type Value = CustomString;
1936
1937                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
1938                        unimplemented!()
1939                    }
1940
1941                    fn visit_str<E>(self, _value: &str) -> Result<Self::Value, E>
1942                    where
1943                        E: de::Error,
1944                    {
1945                        Err(de::Error::custom("foo"))
1946                    }
1947                }
1948
1949                deserializer.deserialize_string(CustomStringVisitor)
1950            }
1951        }
1952
1953        let mut deserializer = Deserializer::new(b"#a;".as_slice());
1954
1955        assert_err_eq!(
1956            CustomString::deserialize(&mut deserializer),
1957            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
1958        );
1959    }
1960
1961    #[derive(Debug, PartialEq)]
1962    struct Bytes(Vec<u8>);
1963
1964    impl<'de> Deserialize<'de> for Bytes {
1965        fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
1966        where
1967            D: de::Deserializer<'de>,
1968        {
1969            struct BytesVisitor;
1970
1971            impl<'de> Visitor<'de> for BytesVisitor {
1972                type Value = Bytes;
1973
1974                fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
1975                    unimplemented!()
1976                }
1977
1978                fn visit_bytes<E>(self, value: &[u8]) -> Result<Self::Value, E>
1979                where
1980                    E: de::Error,
1981                {
1982                    Ok(Bytes(value.to_owned()))
1983                }
1984            }
1985
1986            deserializer.deserialize_bytes(BytesVisitor)
1987        }
1988    }
1989
1990    #[test]
1991    fn bytes() {
1992        let mut deserializer = Deserializer::new(b"#foo;".as_slice());
1993
1994        assert_ok_eq!(
1995            Bytes::deserialize(&mut deserializer),
1996            Bytes(b"foo".to_vec())
1997        );
1998    }
1999
2000    #[test]
2001    fn bytes_unexpected_tag() {
2002        let mut deserializer = Deserializer::new(b"#foo;#bar;".as_slice());
2003
2004        assert_err_eq!(
2005            Bytes::deserialize(&mut deserializer),
2006            Error::new(error::Kind::UnexpectedTag, Position::new(0, 5))
2007        );
2008    }
2009
2010    #[test]
2011    fn bytes_unexpected_values() {
2012        let mut deserializer = Deserializer::new(b"#foo;bar;".as_slice());
2013
2014        assert_err_eq!(
2015            Bytes::deserialize(&mut deserializer),
2016            Error::new(error::Kind::UnexpectedValues, Position::new(0, 5))
2017        );
2018    }
2019
2020    #[test]
2021    fn bytes_unexpected_value() {
2022        let mut deserializer = Deserializer::new(b"#foo:bar;\n".as_slice());
2023
2024        assert_err_eq!(
2025            Bytes::deserialize(&mut deserializer),
2026            Error::new(error::Kind::UnexpectedValue, Position::new(0, 5))
2027        );
2028    }
2029
2030    #[test]
2031    fn bytes_non_ascii() {
2032        let mut deserializer = Deserializer::new(b"#\xF0\x9Ffoo;\n".as_slice());
2033
2034        assert_ok_eq!(
2035            Bytes::deserialize(&mut deserializer),
2036            Bytes(b"\xF0\x9Ffoo".to_vec())
2037        );
2038    }
2039
2040    #[test]
2041    fn bytes_custom_error() {
2042        #[derive(Debug)]
2043        struct CustomBytes;
2044
2045        impl<'de> Deserialize<'de> for CustomBytes {
2046            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2047            where
2048                D: de::Deserializer<'de>,
2049            {
2050                struct CustomBytesVisitor;
2051
2052                impl<'de> Visitor<'de> for CustomBytesVisitor {
2053                    type Value = CustomBytes;
2054
2055                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
2056                        unimplemented!()
2057                    }
2058
2059                    fn visit_bytes<E>(self, _value: &[u8]) -> Result<Self::Value, E>
2060                    where
2061                        E: de::Error,
2062                    {
2063                        Err(de::Error::custom("foo"))
2064                    }
2065                }
2066
2067                deserializer.deserialize_bytes(CustomBytesVisitor)
2068            }
2069        }
2070
2071        let mut deserializer = Deserializer::new(b"#a;".as_slice());
2072
2073        assert_err_eq!(
2074            CustomBytes::deserialize(&mut deserializer),
2075            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
2076        );
2077    }
2078
2079    #[test]
2080    fn byte_buf() {
2081        let mut deserializer = Deserializer::new(b"#foo;".as_slice());
2082
2083        assert_ok_eq!(ByteBuf::deserialize(&mut deserializer), b"foo");
2084    }
2085
2086    #[test]
2087    fn byte_buf_unexpected_tag() {
2088        let mut deserializer = Deserializer::new(b"#foo;#bar;".as_slice());
2089
2090        assert_err_eq!(
2091            ByteBuf::deserialize(&mut deserializer),
2092            Error::new(error::Kind::UnexpectedTag, Position::new(0, 5))
2093        );
2094    }
2095
2096    #[test]
2097    fn byte_buf_unexpected_values() {
2098        let mut deserializer = Deserializer::new(b"#foo;bar;".as_slice());
2099
2100        assert_err_eq!(
2101            ByteBuf::deserialize(&mut deserializer),
2102            Error::new(error::Kind::UnexpectedValues, Position::new(0, 5))
2103        );
2104    }
2105
2106    #[test]
2107    fn byte_buf_unexpected_value() {
2108        let mut deserializer = Deserializer::new(b"#foo:bar;\n".as_slice());
2109
2110        assert_err_eq!(
2111            ByteBuf::deserialize(&mut deserializer),
2112            Error::new(error::Kind::UnexpectedValue, Position::new(0, 5))
2113        );
2114    }
2115
2116    #[test]
2117    fn byte_buf_non_ascii() {
2118        let mut deserializer = Deserializer::new(b"#\xF0\x9Ffoo;\n".as_slice());
2119
2120        assert_ok_eq!(ByteBuf::deserialize(&mut deserializer), b"\xF0\x9Ffoo");
2121    }
2122
2123    #[test]
2124    fn byte_buf_custom_error() {
2125        #[derive(Debug)]
2126        struct CustomByteBuf;
2127
2128        impl<'de> Deserialize<'de> for CustomByteBuf {
2129            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2130            where
2131                D: de::Deserializer<'de>,
2132            {
2133                struct CustomByteBufVisitor;
2134
2135                impl<'de> Visitor<'de> for CustomByteBufVisitor {
2136                    type Value = CustomByteBuf;
2137
2138                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
2139                        unimplemented!()
2140                    }
2141
2142                    fn visit_byte_buf<E>(self, _value: Vec<u8>) -> Result<Self::Value, E>
2143                    where
2144                        E: de::Error,
2145                    {
2146                        Err(de::Error::custom("foo"))
2147                    }
2148                }
2149
2150                deserializer.deserialize_byte_buf(CustomByteBufVisitor)
2151            }
2152        }
2153
2154        let mut deserializer = Deserializer::new(b"#a;".as_slice());
2155
2156        assert_err_eq!(
2157            CustomByteBuf::deserialize(&mut deserializer),
2158            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
2159        );
2160    }
2161
2162    #[test]
2163    fn none() {
2164        let mut deserializer = Deserializer::new(b"\n\n".as_slice());
2165
2166        assert_ok_eq!(Option::<()>::deserialize(&mut deserializer), None);
2167    }
2168
2169    #[test]
2170    fn some_integer() {
2171        let mut deserializer = Deserializer::new(b"#42;\n".as_slice());
2172
2173        assert_ok_eq!(Option::<u64>::deserialize(&mut deserializer), Some(42));
2174    }
2175
2176    #[test]
2177    fn unit() {
2178        let mut deserializer = Deserializer::new(b"#;".as_slice());
2179
2180        assert_ok_eq!(<()>::deserialize(&mut deserializer), ());
2181    }
2182
2183    #[test]
2184    fn unit_invalid() {
2185        let mut deserializer = Deserializer::new(b"#invalid;".as_slice());
2186
2187        assert_err_eq!(
2188            <()>::deserialize(&mut deserializer),
2189            Error::new(error::Kind::ExpectedUnit, Position::new(0, 1))
2190        );
2191    }
2192
2193    #[test]
2194    fn unit_unexpected_tag() {
2195        let mut deserializer = Deserializer::new(b"#;\n#;".as_slice());
2196
2197        assert_err_eq!(
2198            <()>::deserialize(&mut deserializer),
2199            Error::new(error::Kind::UnexpectedTag, Position::new(1, 0))
2200        );
2201    }
2202
2203    #[test]
2204    fn unit_unexpected_values() {
2205        let mut deserializer = Deserializer::new(b"#;\n;".as_slice());
2206
2207        assert_err_eq!(
2208            <()>::deserialize(&mut deserializer),
2209            Error::new(error::Kind::UnexpectedValues, Position::new(1, 0))
2210        );
2211    }
2212
2213    #[test]
2214    fn unit_unexpected_value() {
2215        let mut deserializer = Deserializer::new(b"#:;\n".as_slice());
2216
2217        assert_err_eq!(
2218            <()>::deserialize(&mut deserializer),
2219            Error::new(error::Kind::UnexpectedValue, Position::new(0, 2))
2220        );
2221    }
2222
2223    #[test]
2224    fn unit_custom_error() {
2225        #[derive(Debug)]
2226        struct CustomUnit;
2227
2228        impl<'de> Deserialize<'de> for CustomUnit {
2229            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2230            where
2231                D: de::Deserializer<'de>,
2232            {
2233                struct CustomUnitVisitor;
2234
2235                impl<'de> Visitor<'de> for CustomUnitVisitor {
2236                    type Value = CustomUnit;
2237
2238                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
2239                        unimplemented!()
2240                    }
2241
2242                    fn visit_unit<E>(self) -> Result<Self::Value, E>
2243                    where
2244                        E: de::Error,
2245                    {
2246                        Err(de::Error::custom("foo"))
2247                    }
2248                }
2249
2250                deserializer.deserialize_unit(CustomUnitVisitor)
2251            }
2252        }
2253
2254        let mut deserializer = Deserializer::new(b"#;".as_slice());
2255
2256        assert_err_eq!(
2257            CustomUnit::deserialize(&mut deserializer),
2258            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
2259        );
2260    }
2261
2262    #[test]
2263    fn unit_struct() {
2264        #[derive(Debug, Deserialize, PartialEq)]
2265        struct Unit;
2266        let mut deserializer = Deserializer::new(b"#;".as_slice());
2267
2268        assert_ok_eq!(Unit::deserialize(&mut deserializer), Unit);
2269    }
2270
2271    #[test]
2272    fn unit_struct_invalid() {
2273        #[derive(Debug, Deserialize)]
2274        struct Unit;
2275        let mut deserializer = Deserializer::new(b"#invalid;".as_slice());
2276
2277        assert_err_eq!(
2278            Unit::deserialize(&mut deserializer),
2279            Error::new(error::Kind::ExpectedUnit, Position::new(0, 1))
2280        );
2281    }
2282
2283    #[test]
2284    fn unit_struct_unexpected_tag() {
2285        #[derive(Debug, Deserialize)]
2286        struct Unit;
2287        let mut deserializer = Deserializer::new(b"#;\n#;".as_slice());
2288
2289        assert_err_eq!(
2290            Unit::deserialize(&mut deserializer),
2291            Error::new(error::Kind::UnexpectedTag, Position::new(1, 0))
2292        );
2293    }
2294
2295    #[test]
2296    fn unit_struct_unexpected_values() {
2297        #[derive(Debug, Deserialize)]
2298        struct Unit;
2299        let mut deserializer = Deserializer::new(b"#;\n;".as_slice());
2300
2301        assert_err_eq!(
2302            Unit::deserialize(&mut deserializer),
2303            Error::new(error::Kind::UnexpectedValues, Position::new(1, 0))
2304        );
2305    }
2306
2307    #[test]
2308    fn unit_struct_unexpected_value() {
2309        #[derive(Debug, Deserialize)]
2310        struct Unit;
2311        let mut deserializer = Deserializer::new(b"#:;\n".as_slice());
2312
2313        assert_err_eq!(
2314            Unit::deserialize(&mut deserializer),
2315            Error::new(error::Kind::UnexpectedValue, Position::new(0, 2))
2316        );
2317    }
2318
2319    #[test]
2320    fn unit_struct_custom_error() {
2321        #[derive(Debug)]
2322        struct CustomUnitStruct;
2323
2324        impl<'de> Deserialize<'de> for CustomUnitStruct {
2325            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2326            where
2327                D: de::Deserializer<'de>,
2328            {
2329                struct CustomUnitStructVisitor;
2330
2331                impl<'de> Visitor<'de> for CustomUnitStructVisitor {
2332                    type Value = CustomUnitStruct;
2333
2334                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
2335                        unimplemented!()
2336                    }
2337
2338                    fn visit_unit<E>(self) -> Result<Self::Value, E>
2339                    where
2340                        E: de::Error,
2341                    {
2342                        Err(de::Error::custom("foo"))
2343                    }
2344                }
2345
2346                deserializer.deserialize_unit_struct("CustomUnitStruct", CustomUnitStructVisitor)
2347            }
2348        }
2349
2350        let mut deserializer = Deserializer::new(b"#;".as_slice());
2351
2352        assert_err_eq!(
2353            CustomUnitStruct::deserialize(&mut deserializer),
2354            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
2355        );
2356    }
2357
2358    #[test]
2359    fn newtype_struct() {
2360        #[derive(Debug, Deserialize, PartialEq)]
2361        struct Newtype(u64);
2362        let mut deserializer = Deserializer::new(b"#42;\n".as_slice());
2363
2364        assert_ok_eq!(Newtype::deserialize(&mut deserializer), Newtype(42));
2365    }
2366
2367    #[test]
2368    fn seq() {
2369        let mut deserializer = Deserializer::new(b"#foo;#bar;#baz;".as_slice());
2370
2371        assert_ok_eq!(
2372            Vec::<String>::deserialize(&mut deserializer),
2373            vec!["foo".to_owned(), "bar".to_owned(), "baz".to_owned()]
2374        );
2375    }
2376
2377    #[test]
2378    fn tuple_single_value() {
2379        let mut deserializer = Deserializer::new(b"#foo;\n".as_slice());
2380
2381        assert_ok_eq!(
2382            <(String,)>::deserialize(&mut deserializer),
2383            ("foo".to_owned(),)
2384        );
2385    }
2386
2387    #[test]
2388    fn tuple_multiple_values() {
2389        let mut deserializer = Deserializer::new(b"#foo:42:1.2;\n".as_slice());
2390
2391        assert_ok_eq!(
2392            <(String, u64, (), f64)>::deserialize(&mut deserializer),
2393            ("foo".to_owned(), 42, (), 1.2)
2394        );
2395    }
2396
2397    #[test]
2398    fn tuple_nested_values() {
2399        let mut deserializer = Deserializer::new(b"#foo:42:1.2;\n".as_slice());
2400
2401        assert_ok_eq!(
2402            <(String, (u64, ()), f64)>::deserialize(&mut deserializer),
2403            ("foo".to_owned(), (42, ()), 1.2)
2404        );
2405    }
2406
2407    #[test]
2408    fn tuple_too_many_values() {
2409        let mut deserializer = Deserializer::new(b"#foo:42:1.2;\n".as_slice());
2410
2411        assert_err_eq!(
2412            <(String, u64, ())>::deserialize(&mut deserializer),
2413            Error::new(error::Kind::UnexpectedValue, Position::new(0, 8))
2414        );
2415    }
2416
2417    #[test]
2418    fn tuple_unexpected_values() {
2419        let mut deserializer = Deserializer::new(b"#foo:42:1.2;\nbar:100;\n".as_slice());
2420
2421        assert_err_eq!(
2422            <(String, u64, (), f64)>::deserialize(&mut deserializer),
2423            Error::new(error::Kind::UnexpectedValues, Position::new(1, 0))
2424        );
2425    }
2426
2427    #[test]
2428    fn tuple_unexpected_tag() {
2429        let mut deserializer = Deserializer::new(b"#foo:42:1.2;\n#bar:100;\n".as_slice());
2430
2431        assert_err_eq!(
2432            <(String, u64, (), f64)>::deserialize(&mut deserializer),
2433            Error::new(error::Kind::UnexpectedTag, Position::new(1, 0))
2434        );
2435    }
2436
2437    #[test]
2438    fn tuple_struct_single_value() {
2439        #[derive(Debug, Deserialize, PartialEq)]
2440        struct TupleStruct(String);
2441        let mut deserializer = Deserializer::new(b"#foo;\n".as_slice());
2442
2443        assert_ok_eq!(
2444            TupleStruct::deserialize(&mut deserializer),
2445            TupleStruct("foo".to_owned(),)
2446        );
2447    }
2448
2449    #[test]
2450    fn tuple_struct_multiple_values() {
2451        #[derive(Debug, Deserialize, PartialEq)]
2452        struct TupleStruct(String, u64, (), f64);
2453        let mut deserializer = Deserializer::new(b"#foo:42:1.2;\n".as_slice());
2454
2455        assert_ok_eq!(
2456            TupleStruct::deserialize(&mut deserializer),
2457            TupleStruct("foo".to_owned(), 42, (), 1.2)
2458        );
2459    }
2460
2461    #[test]
2462    fn tuple_struct_nested_values() {
2463        #[derive(Debug, Deserialize, PartialEq)]
2464        struct NestedTupleStruct(u64, ());
2465        #[derive(Debug, Deserialize, PartialEq)]
2466        struct TupleStruct(String, NestedTupleStruct, f64);
2467        let mut deserializer = Deserializer::new(b"#foo:42:1.2;\n".as_slice());
2468
2469        assert_ok_eq!(
2470            TupleStruct::deserialize(&mut deserializer),
2471            TupleStruct("foo".to_owned(), NestedTupleStruct(42, ()), 1.2)
2472        );
2473    }
2474
2475    #[test]
2476    fn tuple_struct_too_many_values() {
2477        #[derive(Debug, Deserialize, PartialEq)]
2478        struct TupleStruct(String, u64, ());
2479        let mut deserializer = Deserializer::new(b"#foo:42:1.2;\n".as_slice());
2480
2481        assert_err_eq!(
2482            TupleStruct::deserialize(&mut deserializer),
2483            Error::new(error::Kind::UnexpectedValue, Position::new(0, 8))
2484        );
2485    }
2486
2487    #[test]
2488    fn tuple_struct_unexpected_values() {
2489        #[derive(Debug, Deserialize, PartialEq)]
2490        struct TupleStruct(String, u64, (), f64);
2491        let mut deserializer = Deserializer::new(b"#foo:42:1.2;\nbar:100;\n".as_slice());
2492
2493        assert_err_eq!(
2494            TupleStruct::deserialize(&mut deserializer),
2495            Error::new(error::Kind::UnexpectedValues, Position::new(1, 0))
2496        );
2497    }
2498
2499    #[test]
2500    fn tuple_struct_unexpected_tag() {
2501        #[derive(Debug, Deserialize, PartialEq)]
2502        struct TupleStruct(String, u64, (), f64);
2503        let mut deserializer = Deserializer::new(b"#foo:42:1.2;\n#bar:100;\n".as_slice());
2504
2505        assert_err_eq!(
2506            TupleStruct::deserialize(&mut deserializer),
2507            Error::new(error::Kind::UnexpectedTag, Position::new(1, 0))
2508        );
2509    }
2510
2511    #[test]
2512    fn map() {
2513        let mut deserializer =
2514            Deserializer::new(b"#foo:1;\n#bar:2;\n#baz:3;\n#qux:4;\n".as_slice());
2515
2516        let mut expected = HashMap::new();
2517        expected.insert("foo".to_owned(), 1);
2518        expected.insert("bar".to_owned(), 2);
2519        expected.insert("baz".to_owned(), 3);
2520        expected.insert("qux".to_owned(), 4);
2521        assert_ok_eq!(
2522            HashMap::<String, u64>::deserialize(&mut deserializer),
2523            expected
2524        );
2525    }
2526
2527    #[test]
2528    fn r#struct() {
2529        #[derive(Debug, Deserialize, PartialEq)]
2530        struct Struct {
2531            foo: String,
2532            bar: u64,
2533            baz: (),
2534            qux: f64,
2535        }
2536        let mut deserializer =
2537            Deserializer::new(b"#foo:text;\n#bar:42;\n#baz;\n#qux:1.2;\n".as_slice());
2538
2539        assert_ok_eq!(
2540            Struct::deserialize(&mut deserializer),
2541            Struct {
2542                foo: "text".to_owned(),
2543                bar: 42,
2544                baz: (),
2545                qux: 1.2,
2546            }
2547        );
2548    }
2549
2550    #[test]
2551    fn struct_optional_field_present() {
2552        #[derive(Debug, Deserialize, PartialEq)]
2553        struct Struct {
2554            foo: String,
2555            bar: Option<u64>,
2556            baz: (),
2557            qux: f64,
2558        }
2559        let mut deserializer =
2560            Deserializer::new(b"#foo:text;\n#bar:42;\n#baz;\n#qux:1.2;\n".as_slice());
2561
2562        assert_ok_eq!(
2563            Struct::deserialize(&mut deserializer),
2564            Struct {
2565                foo: "text".to_owned(),
2566                bar: Some(42),
2567                baz: (),
2568                qux: 1.2,
2569            }
2570        );
2571    }
2572
2573    #[test]
2574    fn struct_optional_field_missing() {
2575        #[derive(Debug, Deserialize, PartialEq)]
2576        struct Struct {
2577            foo: String,
2578            bar: Option<u64>,
2579            baz: (),
2580            qux: f64,
2581        }
2582        let mut deserializer = Deserializer::new(b"#foo:text;\n#baz;\n#qux:1.2;\n".as_slice());
2583
2584        assert_ok_eq!(
2585            Struct::deserialize(&mut deserializer),
2586            Struct {
2587                foo: "text".to_owned(),
2588                bar: None,
2589                baz: (),
2590                qux: 1.2,
2591            }
2592        );
2593    }
2594
2595    #[test]
2596    fn struct_containing_map() {
2597        #[derive(Debug, Deserialize, PartialEq)]
2598        struct Struct {
2599            foo: String,
2600            bar: u64,
2601            baz: (),
2602            qux: HashMap<String, u64>,
2603        }
2604        let mut deserializer =
2605            Deserializer::new(b"#foo:text;\n#bar:42;\n#baz;\n#qux:a:1;b:2;c:3;d:4;\n".as_slice());
2606
2607        let mut expected = HashMap::new();
2608        expected.insert("a".to_owned(), 1);
2609        expected.insert("b".to_owned(), 2);
2610        expected.insert("c".to_owned(), 3);
2611        expected.insert("d".to_owned(), 4);
2612        assert_ok_eq!(
2613            Struct::deserialize(&mut deserializer),
2614            Struct {
2615                foo: "text".to_owned(),
2616                bar: 42,
2617                baz: (),
2618                qux: expected,
2619            }
2620        );
2621    }
2622
2623    #[test]
2624    fn struct_order_does_not_matter() {
2625        #[derive(Debug, Deserialize, PartialEq)]
2626        struct Struct {
2627            foo: String,
2628            bar: u64,
2629            baz: (),
2630            qux: f64,
2631        }
2632        let mut deserializer =
2633            Deserializer::new(b"#bar:42;\n#foo:text;\n#qux:1.2;\n#baz;\n".as_slice());
2634
2635        assert_ok_eq!(
2636            Struct::deserialize(&mut deserializer),
2637            Struct {
2638                foo: "text".to_owned(),
2639                bar: 42,
2640                baz: (),
2641                qux: 1.2,
2642            }
2643        );
2644    }
2645
2646    #[test]
2647    fn enum_unit_variant() {
2648        #[derive(Debug, Deserialize, PartialEq)]
2649        enum Unit {
2650            Variant,
2651        }
2652        let mut deserializer = Deserializer::new(b"#Variant;\n".as_slice());
2653
2654        assert_ok_eq!(Unit::deserialize(&mut deserializer), Unit::Variant);
2655    }
2656
2657    #[test]
2658    fn enum_unit_variant_too_many_values() {
2659        #[derive(Debug, Deserialize, PartialEq)]
2660        enum Unit {
2661            Variant,
2662        }
2663        let mut deserializer = Deserializer::new(b"#Variant:42;\n".as_slice());
2664
2665        assert_err_eq!(
2666            Unit::deserialize(&mut deserializer),
2667            Error::new(error::Kind::UnexpectedValue, Position::new(0, 9))
2668        );
2669    }
2670
2671    #[test]
2672    fn enum_unit_variant_unexpected_values() {
2673        #[derive(Debug, Deserialize, PartialEq)]
2674        enum Unit {
2675            Variant,
2676        }
2677        let mut deserializer = Deserializer::new(b"#Variant;42;\n".as_slice());
2678
2679        assert_err_eq!(
2680            Unit::deserialize(&mut deserializer),
2681            Error::new(error::Kind::UnexpectedValues, Position::new(0, 9))
2682        );
2683    }
2684
2685    #[test]
2686    fn enum_unit_variant_unexpected_tag() {
2687        #[derive(Debug, Deserialize, PartialEq)]
2688        enum Unit {
2689            Variant,
2690        }
2691        let mut deserializer = Deserializer::new(b"#Variant;\n#42;\n".as_slice());
2692
2693        assert_err_eq!(
2694            Unit::deserialize(&mut deserializer),
2695            Error::new(error::Kind::UnexpectedTag, Position::new(1, 0))
2696        );
2697    }
2698
2699    #[test]
2700    fn enum_newtype_variant() {
2701        #[derive(Debug, Deserialize, PartialEq)]
2702        enum Newtype {
2703            Variant(u64),
2704        }
2705        let mut deserializer = Deserializer::new(b"#Variant:42;\n".as_slice());
2706
2707        assert_ok_eq!(
2708            Newtype::deserialize(&mut deserializer),
2709            Newtype::Variant(42),
2710        );
2711    }
2712
2713    #[test]
2714    fn enum_newtype_variant_too_many_values() {
2715        #[derive(Debug, Deserialize, PartialEq)]
2716        enum Newtype {
2717            Variant(u64),
2718        }
2719        let mut deserializer = Deserializer::new(b"#Variant:42:foo;\n".as_slice());
2720
2721        assert_err_eq!(
2722            Newtype::deserialize(&mut deserializer),
2723            Error::new(error::Kind::UnexpectedValue, Position::new(0, 12))
2724        );
2725    }
2726
2727    #[test]
2728    fn enum_newtype_variant_unexpected_values() {
2729        #[derive(Debug, Deserialize, PartialEq)]
2730        enum Newtype {
2731            Variant(u64),
2732        }
2733        let mut deserializer = Deserializer::new(b"#Variant:42;foo;\n".as_slice());
2734
2735        assert_err_eq!(
2736            Newtype::deserialize(&mut deserializer),
2737            Error::new(error::Kind::UnexpectedValues, Position::new(0, 12))
2738        );
2739    }
2740
2741    #[test]
2742    fn enum_newtype_variant_unexpected_tag() {
2743        #[derive(Debug, Deserialize, PartialEq)]
2744        enum Newtype {
2745            Variant(u64),
2746        }
2747        let mut deserializer = Deserializer::new(b"#Variant:42;\n#foo;\n".as_slice());
2748
2749        assert_err_eq!(
2750            Newtype::deserialize(&mut deserializer),
2751            Error::new(error::Kind::UnexpectedTag, Position::new(1, 0))
2752        );
2753    }
2754
2755    #[test]
2756    fn enum_tuple_variant() {
2757        #[derive(Debug, Deserialize, PartialEq)]
2758        enum Tuple {
2759            Variant(u64, String, (), f64),
2760        }
2761        let mut deserializer = Deserializer::new(b"#Variant:42:foo:1.2;\n".as_slice());
2762
2763        assert_ok_eq!(
2764            Tuple::deserialize(&mut deserializer),
2765            Tuple::Variant(42, "foo".to_owned(), (), 1.2),
2766        );
2767    }
2768
2769    #[test]
2770    fn enum_tuple_variant_too_many_values() {
2771        #[derive(Debug, Deserialize, PartialEq)]
2772        enum Tuple {
2773            Variant(u64, String, (), f64),
2774        }
2775        let mut deserializer = Deserializer::new(b"#Variant:42:foo:1.2:bar;\n".as_slice());
2776
2777        assert_err_eq!(
2778            Tuple::deserialize(&mut deserializer),
2779            Error::new(error::Kind::UnexpectedValue, Position::new(0, 20))
2780        );
2781    }
2782
2783    #[test]
2784    fn enum_tuple_variant_unexpected_values() {
2785        #[derive(Debug, Deserialize, PartialEq)]
2786        enum Tuple {
2787            Variant(u64, String, (), f64),
2788        }
2789        let mut deserializer = Deserializer::new(b"#Variant:42:foo:1.2;bar;\n".as_slice());
2790
2791        assert_err_eq!(
2792            Tuple::deserialize(&mut deserializer),
2793            Error::new(error::Kind::UnexpectedValues, Position::new(0, 20))
2794        );
2795    }
2796
2797    #[test]
2798    fn enum_tuple_variant_unexpected_tag() {
2799        #[derive(Debug, Deserialize, PartialEq)]
2800        enum Tuple {
2801            Variant(u64, String, (), f64),
2802        }
2803        let mut deserializer = Deserializer::new(b"#Variant:42:foo:1.2;\n#bar;\n".as_slice());
2804
2805        assert_err_eq!(
2806            Tuple::deserialize(&mut deserializer),
2807            Error::new(error::Kind::UnexpectedTag, Position::new(1, 0))
2808        );
2809    }
2810
2811    #[derive(Debug, PartialEq)]
2812    struct Identifier(String);
2813
2814    impl<'de> Deserialize<'de> for Identifier {
2815        fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2816        where
2817            D: de::Deserializer<'de>,
2818        {
2819            struct IdentifierVisitor;
2820
2821            impl<'de> Visitor<'de> for IdentifierVisitor {
2822                type Value = Identifier;
2823
2824                fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result {
2825                    formatter.write_str("identifier")
2826                }
2827
2828                fn visit_str<E>(self, value: &str) -> Result<Self::Value, E>
2829                where
2830                    E: de::Error,
2831                {
2832                    Ok(Identifier(value.to_owned()))
2833                }
2834            }
2835
2836            deserializer.deserialize_identifier(IdentifierVisitor)
2837        }
2838    }
2839
2840    #[test]
2841    fn identifier() {
2842        let mut deserializer = Deserializer::new(b"#foo;".as_slice());
2843
2844        assert_ok_eq!(
2845            Identifier::deserialize(&mut deserializer),
2846            Identifier("foo".to_string())
2847        );
2848    }
2849
2850    #[test]
2851    fn identifier_whitespace() {
2852        let mut deserializer = Deserializer::new(b"#   foo  ;".as_slice());
2853
2854        assert_ok_eq!(
2855            Identifier::deserialize(&mut deserializer),
2856            Identifier("foo".to_string())
2857        );
2858    }
2859
2860    #[test]
2861    fn identifier_unexpected_tag() {
2862        let mut deserializer = Deserializer::new(b"#foo;#bar;".as_slice());
2863
2864        assert_err_eq!(
2865            String::deserialize(&mut deserializer),
2866            Error::new(error::Kind::UnexpectedTag, Position::new(0, 5))
2867        );
2868    }
2869
2870    #[test]
2871    fn identifier_unexpected_values() {
2872        let mut deserializer = Deserializer::new(b"#foo;bar;".as_slice());
2873
2874        assert_err_eq!(
2875            Identifier::deserialize(&mut deserializer),
2876            Error::new(error::Kind::UnexpectedValues, Position::new(0, 5))
2877        );
2878    }
2879
2880    #[test]
2881    fn identifier_unexpected_value() {
2882        let mut deserializer = Deserializer::new(b"#foo:bar;\n".as_slice());
2883
2884        assert_err_eq!(
2885            Identifier::deserialize(&mut deserializer),
2886            Error::new(error::Kind::UnexpectedValue, Position::new(0, 5))
2887        );
2888    }
2889
2890    #[test]
2891    fn identifier_invalid() {
2892        let mut deserializer = Deserializer::new(b"#\xF0\x9Ffoo;\n".as_slice());
2893
2894        assert_err_eq!(
2895            Identifier::deserialize(&mut deserializer),
2896            Error::new(error::Kind::ExpectedIdentifier, Position::new(0, 1)),
2897        );
2898    }
2899
2900    #[test]
2901    fn identifier_custom_error() {
2902        #[derive(Debug)]
2903        struct CustomIdentifier;
2904
2905        impl<'de> Deserialize<'de> for CustomIdentifier {
2906            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2907            where
2908                D: de::Deserializer<'de>,
2909            {
2910                struct CustomIdentifierVisitor;
2911
2912                impl<'de> Visitor<'de> for CustomIdentifierVisitor {
2913                    type Value = CustomIdentifier;
2914
2915                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
2916                        unimplemented!()
2917                    }
2918
2919                    fn visit_str<E>(self, _value: &str) -> Result<Self::Value, E>
2920                    where
2921                        E: de::Error,
2922                    {
2923                        Err(de::Error::custom("foo"))
2924                    }
2925                }
2926
2927                deserializer.deserialize_identifier(CustomIdentifierVisitor)
2928            }
2929        }
2930
2931        let mut deserializer = Deserializer::new(b"#a;".as_slice());
2932
2933        assert_err_eq!(
2934            CustomIdentifier::deserialize(&mut deserializer),
2935            Error::new(error::Kind::Custom("foo".to_string()), Position::new(0, 1))
2936        );
2937    }
2938
2939    #[test]
2940    fn any() {
2941        #[derive(Debug)]
2942        struct Any;
2943
2944        impl<'de> Deserialize<'de> for Any {
2945            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2946            where
2947                D: de::Deserializer<'de>,
2948            {
2949                struct AnyVisitor;
2950
2951                impl<'de> Visitor<'de> for AnyVisitor {
2952                    type Value = Any;
2953
2954                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
2955                        unimplemented!()
2956                    }
2957                }
2958
2959                deserializer.deserialize_any(AnyVisitor)
2960            }
2961        }
2962
2963        let mut deserializer = Deserializer::new(b"#foo;".as_slice());
2964
2965        assert_err_eq!(
2966            Any::deserialize(&mut deserializer),
2967            Error::new(
2968                error::Kind::CannotDeserializeAsSelfDescribing,
2969                Position::new(0, 1)
2970            )
2971        );
2972    }
2973
2974    #[test]
2975    fn ignored_any() {
2976        #[derive(Debug)]
2977        struct IgnoredAny;
2978
2979        impl<'de> Deserialize<'de> for IgnoredAny {
2980            fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
2981            where
2982                D: de::Deserializer<'de>,
2983            {
2984                struct IgnoredAnyVisitor;
2985
2986                impl<'de> Visitor<'de> for IgnoredAnyVisitor {
2987                    type Value = IgnoredAny;
2988
2989                    fn expecting(&self, _f: &mut fmt::Formatter) -> fmt::Result {
2990                        unimplemented!()
2991                    }
2992                }
2993
2994                deserializer.deserialize_ignored_any(IgnoredAnyVisitor)
2995            }
2996        }
2997
2998        let mut deserializer = Deserializer::new(b"#foo;".as_slice());
2999
3000        assert_err_eq!(
3001            IgnoredAny::deserialize(&mut deserializer),
3002            Error::new(
3003                error::Kind::CannotDeserializeAsSelfDescribing,
3004                Position::new(0, 1)
3005            )
3006        );
3007    }
3008}