1mod 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#[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 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 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 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
587pub 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
597pub 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}