4 Deserialize
, Deserializer
, EnumAccess
, Error
, SeqAccess
, Unexpected
, VariantAccess
, Visitor
,
7 #[cfg(any(core_duration, feature = "std", feature = "alloc"))]
10 use de
::from_primitive
::FromPrimitive
;
11 use private
::de
::InPlaceSeed
;
13 #[cfg(any(feature = "std", feature = "alloc"))]
14 use private
::de
::size_hint
;
16 ////////////////////////////////////////////////////////////////////////////////
20 impl<'de
> Visitor
<'de
> for UnitVisitor
{
23 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
24 formatter
.write_str("unit")
27 fn visit_unit
<E
>(self) -> Result
<Self::Value
, E
>
35 impl<'de
> Deserialize
<'de
> for () {
36 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
40 deserializer
.deserialize_unit(UnitVisitor
)
44 #[cfg(feature = "unstable")]
45 impl<'de
> Deserialize
<'de
> for ! {
46 fn deserialize
<D
>(_deserializer
: D
) -> Result
<Self, D
::Error
>
50 Err(Error
::custom("cannot deserialize `!`"))
54 ////////////////////////////////////////////////////////////////////////////////
58 impl<'de
> Visitor
<'de
> for BoolVisitor
{
61 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
62 formatter
.write_str("a boolean")
65 fn visit_bool
<E
>(self, v
: bool
) -> Result
<Self::Value
, E
>
73 impl<'de
> Deserialize
<'de
> for bool
{
74 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
78 deserializer
.deserialize_bool(BoolVisitor
)
82 ////////////////////////////////////////////////////////////////////////////////
84 macro_rules
! visit_integer_method
{
85 ($src_ty
:ident
, $method
:ident
, $from_method
:ident
, $group
:ident
, $group_ty
:ident
) => {
87 fn $method
<E
>(self, v
: $src_ty
) -> Result
<Self::Value
, E
>
91 match FromPrimitive
::$
from_method(v
) {
93 None
=> Err(Error
::invalid_value(
94 Unexpected
::$
group(v
as $group_ty
),
102 macro_rules
! visit_float_method
{
103 ($src_ty
:ident
, $method
:ident
) => {
105 fn $method
<E
>(self, v
: $src_ty
) -> Result
<Self::Value
, E
>
114 macro_rules
! impl_deserialize_num
{
115 ($ty
:ident
, $method
:ident
, $
($visit
:ident
),*) => {
116 impl<'de
> Deserialize
<'de
> for $ty
{
118 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
120 D
: Deserializer
<'de
>,
122 struct PrimitiveVisitor
;
124 impl<'de
> Visitor
<'de
> for PrimitiveVisitor
{
127 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
128 formatter
.write_str(stringify
!($ty
))
132 impl_deserialize_num
!($visit $ty
);
136 deserializer
.$
method(PrimitiveVisitor
)
141 (integer $ty
:ident
) => {
142 visit_integer_method
!(i8, visit_i8
, from_i8
, Signed
, i64);
143 visit_integer_method
!(i16, visit_i16
, from_i16
, Signed
, i64);
144 visit_integer_method
!(i32, visit_i32
, from_i32
, Signed
, i64);
145 visit_integer_method
!(i64, visit_i64
, from_i64
, Signed
, i64);
147 visit_integer_method
!(u8, visit_u8
, from_u8
, Unsigned
, u64);
148 visit_integer_method
!(u16, visit_u16
, from_u16
, Unsigned
, u64);
149 visit_integer_method
!(u32, visit_u32
, from_u32
, Unsigned
, u64);
150 visit_integer_method
!(u64, visit_u64
, from_u64
, Unsigned
, u64);
153 (float $ty
:ident
) => {
154 visit_float_method
!(f32, visit_f32
);
155 visit_float_method
!(f64, visit_f64
);
159 impl_deserialize_num
!(i8, deserialize_i8
, integer
);
160 impl_deserialize_num
!(i16, deserialize_i16
, integer
);
161 impl_deserialize_num
!(i32, deserialize_i32
, integer
);
162 impl_deserialize_num
!(i64, deserialize_i64
, integer
);
163 impl_deserialize_num
!(isize, deserialize_i64
, integer
);
165 impl_deserialize_num
!(u8, deserialize_u8
, integer
);
166 impl_deserialize_num
!(u16, deserialize_u16
, integer
);
167 impl_deserialize_num
!(u32, deserialize_u32
, integer
);
168 impl_deserialize_num
!(u64, deserialize_u64
, integer
);
169 impl_deserialize_num
!(usize, deserialize_u64
, integer
);
171 impl_deserialize_num
!(f32, deserialize_f32
, integer
, float
);
172 impl_deserialize_num
!(f64, deserialize_f64
, integer
, float
);
174 serde_if_integer128
! {
175 impl<'de
> Deserialize
<'de
> for i128
{
177 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
179 D
: Deserializer
<'de
>,
181 struct PrimitiveVisitor
;
183 impl<'de
> Visitor
<'de
> for PrimitiveVisitor
{
186 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
187 formatter
.write_str("i128")
190 impl_deserialize_num
!(integer i128
);
193 fn visit_i128
<E
>(self, v
: i128
) -> Result
<Self::Value
, E
>
201 fn visit_u128
<E
>(self, v
: u128
) -> Result
<Self::Value
, E
>
205 if v
<= i128
::max_value() as u128
{
208 Err(Error
::invalid_value(Unexpected
::Other("u128"), &self))
213 deserializer
.deserialize_i128(PrimitiveVisitor
)
217 impl<'de
> Deserialize
<'de
> for u128
{
219 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
221 D
: Deserializer
<'de
>,
223 struct PrimitiveVisitor
;
225 impl<'de
> Visitor
<'de
> for PrimitiveVisitor
{
228 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
229 formatter
.write_str("u128")
232 impl_deserialize_num
!(integer u128
);
235 fn visit_i128
<E
>(self, v
: i128
) -> Result
<Self::Value
, E
>
242 Err(Error
::invalid_value(Unexpected
::Other("i128"), &self))
247 fn visit_u128
<E
>(self, v
: u128
) -> Result
<Self::Value
, E
>
255 deserializer
.deserialize_u128(PrimitiveVisitor
)
260 ////////////////////////////////////////////////////////////////////////////////
264 impl<'de
> Visitor
<'de
> for CharVisitor
{
267 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
268 formatter
.write_str("a character")
272 fn visit_char
<E
>(self, v
: char) -> Result
<Self::Value
, E
>
280 fn visit_str
<E
>(self, v
: &str) -> Result
<Self::Value
, E
>
284 let mut iter
= v
.chars();
285 match (iter
.next(), iter
.next()) {
286 (Some(c
), None
) => Ok(c
),
287 _
=> Err(Error
::invalid_value(Unexpected
::Str(v
), &self)),
292 impl<'de
> Deserialize
<'de
> for char {
294 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
296 D
: Deserializer
<'de
>,
298 deserializer
.deserialize_char(CharVisitor
)
302 ////////////////////////////////////////////////////////////////////////////////
304 #[cfg(any(feature = "std", feature = "alloc"))]
305 struct StringVisitor
;
306 #[cfg(any(feature = "std", feature = "alloc"))]
307 struct StringInPlaceVisitor
<'a
>(&'a
mut String
);
309 #[cfg(any(feature = "std", feature = "alloc"))]
310 impl<'de
> Visitor
<'de
> for StringVisitor
{
313 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
314 formatter
.write_str("a string")
317 fn visit_str
<E
>(self, v
: &str) -> Result
<Self::Value
, E
>
324 fn visit_string
<E
>(self, v
: String
) -> Result
<Self::Value
, E
>
331 fn visit_bytes
<E
>(self, v
: &[u8]) -> Result
<Self::Value
, E
>
335 match str::from_utf8(v
) {
336 Ok(s
) => Ok(s
.to_owned()),
337 Err(_
) => Err(Error
::invalid_value(Unexpected
::Bytes(v
), &self)),
341 fn visit_byte_buf
<E
>(self, v
: Vec
<u8>) -> Result
<Self::Value
, E
>
345 match String
::from_utf8(v
) {
347 Err(e
) => Err(Error
::invalid_value(
348 Unexpected
::Bytes(&e
.into_bytes()),
355 #[cfg(any(feature = "std", feature = "alloc"))]
356 impl<'a
, 'de
> Visitor
<'de
> for StringInPlaceVisitor
<'a
> {
359 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
360 formatter
.write_str("a string")
363 fn visit_str
<E
>(self, v
: &str) -> Result
<Self::Value
, E
>
372 fn visit_string
<E
>(self, v
: String
) -> Result
<Self::Value
, E
>
380 fn visit_bytes
<E
>(self, v
: &[u8]) -> Result
<Self::Value
, E
>
384 match str::from_utf8(v
) {
390 Err(_
) => Err(Error
::invalid_value(Unexpected
::Bytes(v
), &self)),
394 fn visit_byte_buf
<E
>(self, v
: Vec
<u8>) -> Result
<Self::Value
, E
>
398 match String
::from_utf8(v
) {
403 Err(e
) => Err(Error
::invalid_value(
404 Unexpected
::Bytes(&e
.into_bytes()),
411 #[cfg(any(feature = "std", feature = "alloc"))]
412 impl<'de
> Deserialize
<'de
> for String
{
413 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
415 D
: Deserializer
<'de
>,
417 deserializer
.deserialize_string(StringVisitor
)
420 fn deserialize_in_place
<D
>(deserializer
: D
, place
: &mut Self) -> Result
<(), D
::Error
>
422 D
: Deserializer
<'de
>,
424 deserializer
.deserialize_string(StringInPlaceVisitor(place
))
428 ////////////////////////////////////////////////////////////////////////////////
432 impl<'a
> Visitor
<'a
> for StrVisitor
{
433 type Value
= &'a
str;
435 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
436 formatter
.write_str("a borrowed string")
439 fn visit_borrowed_str
<E
>(self, v
: &'a
str) -> Result
<Self::Value
, E
>
446 fn visit_borrowed_bytes
<E
>(self, v
: &'a
[u8]) -> Result
<Self::Value
, E
>
450 str::from_utf8(v
).map_err(|_
| Error
::invalid_value(Unexpected
::Bytes(v
), &self))
454 impl<'de
: 'a
, 'a
> Deserialize
<'de
> for &'a
str {
455 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
457 D
: Deserializer
<'de
>,
459 deserializer
.deserialize_str(StrVisitor
)
463 ////////////////////////////////////////////////////////////////////////////////
467 impl<'a
> Visitor
<'a
> for BytesVisitor
{
468 type Value
= &'a
[u8];
470 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
471 formatter
.write_str("a borrowed byte array")
474 fn visit_borrowed_bytes
<E
>(self, v
: &'a
[u8]) -> Result
<Self::Value
, E
>
481 fn visit_borrowed_str
<E
>(self, v
: &'a
str) -> Result
<Self::Value
, E
>
489 impl<'de
: 'a
, 'a
> Deserialize
<'de
> for &'a
[u8] {
490 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
492 D
: Deserializer
<'de
>,
494 deserializer
.deserialize_bytes(BytesVisitor
)
498 ////////////////////////////////////////////////////////////////////////////////
500 #[cfg(feature = "std")]
501 struct CStringVisitor
;
503 #[cfg(feature = "std")]
504 impl<'de
> Visitor
<'de
> for CStringVisitor
{
505 type Value
= CString
;
507 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
508 formatter
.write_str("byte array")
511 fn visit_seq
<A
>(self, mut seq
: A
) -> Result
<Self::Value
, A
::Error
>
515 let len
= size_hint
::cautious(seq
.size_hint());
516 let mut values
= Vec
::with_capacity(len
);
518 while let Some(value
) = try
!(seq
.next_element()) {
522 CString
::new(values
).map_err(Error
::custom
)
525 fn visit_bytes
<E
>(self, v
: &[u8]) -> Result
<Self::Value
, E
>
529 CString
::new(v
).map_err(Error
::custom
)
532 fn visit_byte_buf
<E
>(self, v
: Vec
<u8>) -> Result
<Self::Value
, E
>
536 CString
::new(v
).map_err(Error
::custom
)
539 fn visit_str
<E
>(self, v
: &str) -> Result
<Self::Value
, E
>
543 CString
::new(v
).map_err(Error
::custom
)
546 fn visit_string
<E
>(self, v
: String
) -> Result
<Self::Value
, E
>
550 CString
::new(v
).map_err(Error
::custom
)
554 #[cfg(feature = "std")]
555 impl<'de
> Deserialize
<'de
> for CString
{
556 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
558 D
: Deserializer
<'de
>,
560 deserializer
.deserialize_byte_buf(CStringVisitor
)
564 macro_rules
! forwarded_impl
{
567 ( $
($id
: ident
),* ), $ty
: ty
, $func
: expr
570 impl<'de $
(, $id
: Deserialize
<'de
>,)*> Deserialize
<'de
> for $ty
{
571 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
573 D
: Deserializer
<'de
>,
575 Deserialize
::deserialize(deserializer
).map($func
)
581 #[cfg(all(feature = "std", de_boxed_c_str))]
582 forwarded_impl
!((), Box
<CStr
>, CString
::into_boxed_c_str
);
585 forwarded_impl
!((T
), Reverse
<T
>, Reverse
);
587 ////////////////////////////////////////////////////////////////////////////////
589 struct OptionVisitor
<T
> {
590 marker
: PhantomData
<T
>,
593 impl<'de
, T
> Visitor
<'de
> for OptionVisitor
<T
>
597 type Value
= Option
<T
>;
599 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
600 formatter
.write_str("option")
604 fn visit_unit
<E
>(self) -> Result
<Self::Value
, E
>
612 fn visit_none
<E
>(self) -> Result
<Self::Value
, E
>
620 fn visit_some
<D
>(self, deserializer
: D
) -> Result
<Self::Value
, D
::Error
>
622 D
: Deserializer
<'de
>,
624 T
::deserialize(deserializer
).map(Some
)
628 fn __private_visit_untagged_option
<D
>(self, deserializer
: D
) -> Result
<Self::Value
, ()>
630 D
: Deserializer
<'de
>,
632 Ok(T
::deserialize(deserializer
).ok())
636 impl<'de
, T
> Deserialize
<'de
> for Option
<T
>
640 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
642 D
: Deserializer
<'de
>,
644 deserializer
.deserialize_option(OptionVisitor
{
649 // The Some variant's repr is opaque, so we can't play cute tricks with its
650 // tag to have deserialize_in_place build the content in place unconditionally.
652 // FIXME: investigate whether branching on the old value being Some to
653 // deserialize_in_place the value is profitable (probably data-dependent?)
656 ////////////////////////////////////////////////////////////////////////////////
658 struct PhantomDataVisitor
<T
: ?Sized
> {
659 marker
: PhantomData
<T
>,
662 impl<'de
, T
: ?Sized
> Visitor
<'de
> for PhantomDataVisitor
<T
> {
663 type Value
= PhantomData
<T
>;
665 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
666 formatter
.write_str("unit")
670 fn visit_unit
<E
>(self) -> Result
<Self::Value
, E
>
678 impl<'de
, T
: ?Sized
> Deserialize
<'de
> for PhantomData
<T
> {
679 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
681 D
: Deserializer
<'de
>,
683 let visitor
= PhantomDataVisitor
{
686 deserializer
.deserialize_unit_struct("PhantomData", visitor
)
690 ////////////////////////////////////////////////////////////////////////////////
692 #[cfg(any(feature = "std", feature = "alloc"))]
693 macro_rules
! seq_impl
{
695 $ty
:ident
< T $
(: $tbound1
:ident $
(+ $tbound2
:ident
)*)* $
(, $typaram
:ident
: $bound1
:ident $
(+ $bound2
:ident
)*)* >,
702 impl<'de
, T $
(, $typaram
)*> Deserialize
<'de
> for $ty
<T $
(, $typaram
)*>
704 T
: Deserialize
<'de
> $
(+ $tbound1 $
(+ $tbound2
)*)*,
705 $
($typaram
: $bound1 $
(+ $bound2
)*,)*
707 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
709 D
: Deserializer
<'de
>,
711 struct SeqVisitor
<T $
(, $typaram
)*> {
712 marker
: PhantomData
<$ty
<T $
(, $typaram
)*>>,
715 impl<'de
, T $
(, $typaram
)*> Visitor
<'de
> for SeqVisitor
<T $
(, $typaram
)*>
717 T
: Deserialize
<'de
> $
(+ $tbound1 $
(+ $tbound2
)*)*,
718 $
($typaram
: $bound1 $
(+ $bound2
)*,)*
720 type Value
= $ty
<T $
(, $typaram
)*>;
722 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
723 formatter
.write_str("a sequence")
727 fn visit_seq
<A
>(self, mut $access
: A
) -> Result
<Self::Value
, A
::Error
>
731 let mut values
= $with_capacity
;
733 while let Some(value
) = try
!($access
.next_element()) {
734 $
insert(&mut values
, value
);
741 let visitor
= SeqVisitor { marker: PhantomData }
;
742 deserializer
.deserialize_seq(visitor
)
745 fn deserialize_in_place
<D
>(deserializer
: D
, place
: &mut Self) -> Result
<(), D
::Error
>
747 D
: Deserializer
<'de
>,
749 struct SeqInPlaceVisitor
<'a
, T
: 'a $
(, $typaram
: 'a
)*>(&'a
mut $ty
<T $
(, $typaram
)*>);
751 impl<'a
, 'de
, T $
(, $typaram
)*> Visitor
<'de
> for SeqInPlaceVisitor
<'a
, T $
(, $typaram
)*>
753 T
: Deserialize
<'de
> $
(+ $tbound1 $
(+ $tbound2
)*)*,
754 $
($typaram
: $bound1 $
(+ $bound2
)*,)*
758 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
759 formatter
.write_str("a sequence")
763 fn visit_seq
<A
>(mut self, mut $access
: A
) -> Result
<Self::Value
, A
::Error
>
768 $
reserve(&mut self.0, size_hint
::cautious($access
.size_hint()));
770 // FIXME: try to overwrite old values here? (Vec, VecDeque, LinkedList)
771 while let Some(value
) = try
!($access
.next_element()) {
772 $
insert(&mut self.0, value
);
779 deserializer
.deserialize_seq(SeqInPlaceVisitor(place
))
785 // Dummy impl of reserve
786 #[cfg(any(feature = "std", feature = "alloc"))]
787 fn nop_reserve
<T
>(_seq
: T
, _n
: usize) {}
789 #[cfg(any(feature = "std", feature = "alloc"))]
794 BinaryHeap
::with_capacity(size_hint
::cautious(seq
.size_hint())),
799 #[cfg(any(feature = "std", feature = "alloc"))]
801 BTreeSet
<T
: Eq
+ Ord
>,
809 #[cfg(any(feature = "std", feature = "alloc"))]
816 LinkedList
::push_back
819 #[cfg(feature = "std")]
821 HashSet
<T
: Eq
+ Hash
, S
: BuildHasher
+ Default
>,
824 HashSet
::with_capacity_and_hasher(size_hint
::cautious(seq
.size_hint()), S
::default()),
828 #[cfg(any(feature = "std", feature = "alloc"))]
833 VecDeque
::with_capacity(size_hint
::cautious(seq
.size_hint())),
838 ////////////////////////////////////////////////////////////////////////////////
840 #[cfg(any(feature = "std", feature = "alloc"))]
841 impl<'de
, T
> Deserialize
<'de
> for Vec
<T
>
845 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
847 D
: Deserializer
<'de
>,
849 struct VecVisitor
<T
> {
850 marker
: PhantomData
<T
>,
853 impl<'de
, T
> Visitor
<'de
> for VecVisitor
<T
>
859 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
860 formatter
.write_str("a sequence")
863 fn visit_seq
<A
>(self, mut seq
: A
) -> Result
<Self::Value
, A
::Error
>
867 let mut values
= Vec
::with_capacity(size_hint
::cautious(seq
.size_hint()));
869 while let Some(value
) = try
!(seq
.next_element()) {
877 let visitor
= VecVisitor
{
880 deserializer
.deserialize_seq(visitor
)
883 fn deserialize_in_place
<D
>(deserializer
: D
, place
: &mut Self) -> Result
<(), D
::Error
>
885 D
: Deserializer
<'de
>,
887 struct VecInPlaceVisitor
<'a
, T
: 'a
>(&'a
mut Vec
<T
>);
889 impl<'a
, 'de
, T
> Visitor
<'de
> for VecInPlaceVisitor
<'a
, T
>
895 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
896 formatter
.write_str("a sequence")
899 fn visit_seq
<A
>(self, mut seq
: A
) -> Result
<Self::Value
, A
::Error
>
903 let hint
= size_hint
::cautious(seq
.size_hint());
904 if let Some(additional
) = hint
.checked_sub(self.0.len()) {
905 self.0.reserve(additional
);
908 for i
in 0..self.0.len() {
910 let next_place
= InPlaceSeed(&mut self.0[i
]);
911 try
!(seq
.next_element_seed(next_place
))
919 while let Some(value
) = try
!(seq
.next_element()) {
927 deserializer
.deserialize_seq(VecInPlaceVisitor(place
))
931 ////////////////////////////////////////////////////////////////////////////////
933 struct ArrayVisitor
<A
> {
934 marker
: PhantomData
<A
>,
936 struct ArrayInPlaceVisitor
<'a
, A
: 'a
>(&'a
mut A
);
938 impl<A
> ArrayVisitor
<A
> {
946 impl<'de
, T
> Visitor
<'de
> for ArrayVisitor
<[T
; 0]> {
949 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
950 formatter
.write_str("an empty array")
954 fn visit_seq
<A
>(self, _
: A
) -> Result
<Self::Value
, A
::Error
>
962 // Does not require T: Deserialize<'de>.
963 impl<'de
, T
> Deserialize
<'de
> for [T
; 0] {
964 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
966 D
: Deserializer
<'de
>,
968 deserializer
.deserialize_tuple(0, ArrayVisitor
::<[T
; 0]>::new())
972 macro_rules
! array_impls
{
973 ($
($len
:expr
=> ($
($n
:tt
)+))+) => {
975 impl<'de
, T
> Visitor
<'de
> for ArrayVisitor
<[T
; $len
]>
979 type Value
= [T
; $len
];
981 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
982 formatter
.write_str(concat
!("an array of length ", $len
))
986 fn visit_seq
<A
>(self, mut seq
: A
) -> Result
<Self::Value
, A
::Error
>
991 match try
!(seq
.next_element()) {
993 None
=> return Err(Error
::invalid_length($n
, &self)),
999 impl<'a
, 'de
, T
> Visitor
<'de
> for ArrayInPlaceVisitor
<'a
, [T
; $len
]>
1001 T
: Deserialize
<'de
>,
1005 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1006 formatter
.write_str(concat
!("an array of length ", $len
))
1010 fn visit_seq
<A
>(self, mut seq
: A
) -> Result
<Self::Value
, A
::Error
>
1014 let mut fail_idx
= None
;
1015 for (idx
, dest
) in self.0[..].iter_mut().enumerate() {
1016 if try
!(seq
.next_element_seed(InPlaceSeed(dest
))).is_none() {
1017 fail_idx
= Some(idx
);
1021 if let Some(idx
) = fail_idx
{
1022 return Err(Error
::invalid_length(idx
, &self));
1028 impl<'de
, T
> Deserialize
<'de
> for [T
; $len
]
1030 T
: Deserialize
<'de
>,
1032 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1034 D
: Deserializer
<'de
>,
1036 deserializer
.deserialize_tuple($len
, ArrayVisitor
::<[T
; $len
]>::new())
1039 fn deserialize_in_place
<D
>(deserializer
: D
, place
: &mut Self) -> Result
<(), D
::Error
>
1041 D
: Deserializer
<'de
>,
1043 deserializer
.deserialize_tuple($len
, ArrayInPlaceVisitor(place
))
1057 7 => (0 1 2 3 4 5 6)
1058 8 => (0 1 2 3 4 5 6 7)
1059 9 => (0 1 2 3 4 5 6 7 8)
1060 10 => (0 1 2 3 4 5 6 7 8 9)
1061 11 => (0 1 2 3 4 5 6 7 8 9 10)
1062 12 => (0 1 2 3 4 5 6 7 8 9 10 11)
1063 13 => (0 1 2 3 4 5 6 7 8 9 10 11 12)
1064 14 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13)
1065 15 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14)
1066 16 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15)
1067 17 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16)
1068 18 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17)
1069 19 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18)
1070 20 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19)
1071 21 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20)
1072 22 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21)
1073 23 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22)
1074 24 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23)
1075 25 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24)
1076 26 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25)
1077 27 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26)
1078 28 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27)
1079 29 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28)
1080 30 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29)
1081 31 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30)
1082 32 => (0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31)
1085 ////////////////////////////////////////////////////////////////////////////////
1087 macro_rules
! tuple_impls
{
1088 ($
($len
:tt
=> ($
($n
:tt $name
:ident
)+))+) => {
1090 impl<'de
, $
($name
: Deserialize
<'de
>),+> Deserialize
<'de
> for ($
($name
,)+) {
1092 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1094 D
: Deserializer
<'de
>,
1096 struct TupleVisitor
<$
($name
,)+> {
1097 marker
: PhantomData
<($
($name
,)+)>,
1100 impl<'de
, $
($name
: Deserialize
<'de
>),+> Visitor
<'de
> for TupleVisitor
<$
($name
,)+> {
1101 type Value
= ($
($name
,)+);
1103 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1104 formatter
.write_str(concat
!("a tuple of size ", $len
))
1108 #[allow(non_snake_case)]
1109 fn visit_seq
<A
>(self, mut seq
: A
) -> Result
<Self::Value
, A
::Error
>
1114 let $name
= match try
!(seq
.next_element()) {
1115 Some(value
) => value
,
1116 None
=> return Err(Error
::invalid_length($n
, &self)),
1124 deserializer
.deserialize_tuple($len
, TupleVisitor { marker: PhantomData }
)
1128 fn deserialize_in_place
<D
>(deserializer
: D
, place
: &mut Self) -> Result
<(), D
::Error
>
1130 D
: Deserializer
<'de
>,
1132 struct TupleInPlaceVisitor
<'a
, $
($name
: 'a
,)+>(&'a
mut ($
($name
,)+));
1134 impl<'a
, 'de
, $
($name
: Deserialize
<'de
>),+> Visitor
<'de
> for TupleInPlaceVisitor
<'a
, $
($name
,)+> {
1137 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1138 formatter
.write_str(concat
!("a tuple of size ", $len
))
1142 #[allow(non_snake_case)]
1143 fn visit_seq
<A
>(self, mut seq
: A
) -> Result
<Self::Value
, A
::Error
>
1148 if try
!(seq
.next_element_seed(InPlaceSeed(&mut (self.0).$n
))).is_none() {
1149 return Err(Error
::invalid_length($n
, &self));
1157 deserializer
.deserialize_tuple($len
, TupleInPlaceVisitor(place
))
1167 3 => (0 T0
1 T1
2 T2
)
1168 4 => (0 T0
1 T1
2 T2
3 T3
)
1169 5 => (0 T0
1 T1
2 T2
3 T3
4 T4
)
1170 6 => (0 T0
1 T1
2 T2
3 T3
4 T4
5 T5
)
1171 7 => (0 T0
1 T1
2 T2
3 T3
4 T4
5 T5
6 T6
)
1172 8 => (0 T0
1 T1
2 T2
3 T3
4 T4
5 T5
6 T6
7 T7
)
1173 9 => (0 T0
1 T1
2 T2
3 T3
4 T4
5 T5
6 T6
7 T7
8 T8
)
1174 10 => (0 T0
1 T1
2 T2
3 T3
4 T4
5 T5
6 T6
7 T7
8 T8
9 T9
)
1175 11 => (0 T0
1 T1
2 T2
3 T3
4 T4
5 T5
6 T6
7 T7
8 T8
9 T9
10 T10
)
1176 12 => (0 T0
1 T1
2 T2
3 T3
4 T4
5 T5
6 T6
7 T7
8 T8
9 T9
10 T10
11 T11
)
1177 13 => (0 T0
1 T1
2 T2
3 T3
4 T4
5 T5
6 T6
7 T7
8 T8
9 T9
10 T10
11 T11
12 T12
)
1178 14 => (0 T0
1 T1
2 T2
3 T3
4 T4
5 T5
6 T6
7 T7
8 T8
9 T9
10 T10
11 T11
12 T12
13 T13
)
1179 15 => (0 T0
1 T1
2 T2
3 T3
4 T4
5 T5
6 T6
7 T7
8 T8
9 T9
10 T10
11 T11
12 T12
13 T13
14 T14
)
1180 16 => (0 T0
1 T1
2 T2
3 T3
4 T4
5 T5
6 T6
7 T7
8 T8
9 T9
10 T10
11 T11
12 T12
13 T13
14 T14
15 T15
)
1183 ////////////////////////////////////////////////////////////////////////////////
1185 #[cfg(any(feature = "std", feature = "alloc"))]
1186 macro_rules
! map_impl
{
1188 $ty
:ident
< K $
(: $kbound1
:ident $
(+ $kbound2
:ident
)*)*, V $
(, $typaram
:ident
: $bound1
:ident $
(+ $bound2
:ident
)*)* >,
1192 impl<'de
, K
, V $
(, $typaram
)*> Deserialize
<'de
> for $ty
<K
, V $
(, $typaram
)*>
1194 K
: Deserialize
<'de
> $
(+ $kbound1 $
(+ $kbound2
)*)*,
1195 V
: Deserialize
<'de
>,
1196 $
($typaram
: $bound1 $
(+ $bound2
)*),*
1198 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1200 D
: Deserializer
<'de
>,
1202 struct MapVisitor
<K
, V $
(, $typaram
)*> {
1203 marker
: PhantomData
<$ty
<K
, V $
(, $typaram
)*>>,
1206 impl<'de
, K
, V $
(, $typaram
)*> Visitor
<'de
> for MapVisitor
<K
, V $
(, $typaram
)*>
1208 K
: Deserialize
<'de
> $
(+ $kbound1 $
(+ $kbound2
)*)*,
1209 V
: Deserialize
<'de
>,
1210 $
($typaram
: $bound1 $
(+ $bound2
)*),*
1212 type Value
= $ty
<K
, V $
(, $typaram
)*>;
1214 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1215 formatter
.write_str("a map")
1219 fn visit_map
<A
>(self, mut $access
: A
) -> Result
<Self::Value
, A
::Error
>
1223 let mut values
= $with_capacity
;
1225 while let Some((key
, value
)) = try
!($access
.next_entry()) {
1226 values
.insert(key
, value
);
1233 let visitor
= MapVisitor { marker: PhantomData }
;
1234 deserializer
.deserialize_map(visitor
)
1240 #[cfg(any(feature = "std", feature = "alloc"))]
1242 BTreeMap
<K
: Ord
, V
>,
1246 #[cfg(feature = "std")]
1248 HashMap
<K
: Eq
+ Hash
, V
, S
: BuildHasher
+ Default
>,
1250 HashMap
::with_capacity_and_hasher(size_hint
::cautious(map
.size_hint()), S
::default()));
1252 ////////////////////////////////////////////////////////////////////////////////
1254 #[cfg(feature = "std")]
1255 macro_rules
! parse_ip_impl
{
1256 ($expecting
:tt $ty
:ty
; $size
:tt
) => {
1257 impl<'de
> Deserialize
<'de
> for $ty
{
1258 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1260 D
: Deserializer
<'de
>,
1262 if deserializer
.is_human_readable() {
1263 struct IpAddrVisitor
;
1265 impl<'de
> Visitor
<'de
> for IpAddrVisitor
{
1268 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1269 formatter
.write_str($expecting
)
1272 fn visit_str
<E
>(self, s
: &str) -> Result
<Self::Value
, E
>
1276 s
.parse().map_err(Error
::custom
)
1280 deserializer
.deserialize_str(IpAddrVisitor
)
1282 <[u8; $size
]>::deserialize(deserializer
).map(<$ty
>::from
)
1289 #[cfg(feature = "std")]
1290 macro_rules
! variant_identifier
{
1292 $name_kind
: ident ( $
($variant
: ident
; $bytes
: expr
; $index
: expr
),* )
1293 $expecting_message
: expr
,
1294 $variants_name
: ident
1300 static $variants_name
: &'
static [&'
static str] = &[ $
( stringify
!($variant
) ),*];
1302 impl<'de
> Deserialize
<'de
> for $name_kind
{
1303 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1305 D
: Deserializer
<'de
>,
1309 impl<'de
> Visitor
<'de
> for KindVisitor
{
1310 type Value
= $name_kind
;
1312 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1313 formatter
.write_str($expecting_message
)
1316 fn visit_u32
<E
>(self, value
: u32) -> Result
<Self::Value
, E
>
1322 $index
=> Ok($name_kind
:: $variant
),
1324 _
=> Err(Error
::invalid_value(Unexpected
::Unsigned(value
as u64), &self),),
1328 fn visit_str
<E
>(self, value
: &str) -> Result
<Self::Value
, E
>
1334 stringify
!($variant
) => Ok($name_kind
:: $variant
),
1336 _
=> Err(Error
::unknown_variant(value
, $variants_name
)),
1340 fn visit_bytes
<E
>(self, value
: &[u8]) -> Result
<Self::Value
, E
>
1346 $bytes
=> Ok($name_kind
:: $variant
),
1349 match str::from_utf8(value
) {
1350 Ok(value
) => Err(Error
::unknown_variant(value
, $variants_name
)),
1351 Err(_
) => Err(Error
::invalid_value(Unexpected
::Bytes(value
), &self)),
1358 deserializer
.deserialize_identifier(KindVisitor
)
1364 #[cfg(feature = "std")]
1365 macro_rules
! deserialize_enum
{
1367 $name
: ident $name_kind
: ident ( $
($variant
: ident
; $bytes
: expr
; $index
: expr
),* )
1368 $expecting_message
: expr
,
1371 variant_identifier
!{
1372 $
name_kind ( $
($variant
; $bytes
; $index
),* )
1378 impl<'de
> Visitor
<'de
> for EnumVisitor
{
1381 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1382 formatter
.write_str(concat
!("a ", stringify
!($name
)))
1386 fn visit_enum
<A
>(self, data
: A
) -> Result
<Self::Value
, A
::Error
>
1390 match try
!(data
.variant()) {
1392 ($name_kind
:: $variant
, v
) => v
.newtype_variant().map($name
:: $variant
),
1397 $deserializer
.deserialize_enum(stringify
!($name
), VARIANTS
, EnumVisitor
)
1401 #[cfg(feature = "std")]
1402 impl<'de
> Deserialize
<'de
> for net
::IpAddr
{
1403 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1405 D
: Deserializer
<'de
>,
1407 if deserializer
.is_human_readable() {
1408 struct IpAddrVisitor
;
1410 impl<'de
> Visitor
<'de
> for IpAddrVisitor
{
1411 type Value
= net
::IpAddr
;
1413 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1414 formatter
.write_str("IP address")
1417 fn visit_str
<E
>(self, s
: &str) -> Result
<Self::Value
, E
>
1421 s
.parse().map_err(Error
::custom
)
1425 deserializer
.deserialize_str(IpAddrVisitor
)
1427 use lib
::net
::IpAddr
;
1429 IpAddr
IpAddrKind (V4
; b
"V4"; 0, V6
; b
"V6"; 1)
1437 #[cfg(feature = "std")]
1438 parse_ip_impl
!("IPv4 address" net
::Ipv4Addr
; 4);
1440 #[cfg(feature = "std")]
1441 parse_ip_impl
!("IPv6 address" net
::Ipv6Addr
; 16);
1443 #[cfg(feature = "std")]
1444 macro_rules
! parse_socket_impl
{
1445 ($expecting
:tt $ty
:ty
, $new
:expr
) => {
1446 impl<'de
> Deserialize
<'de
> for $ty
{
1447 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1449 D
: Deserializer
<'de
>,
1451 if deserializer
.is_human_readable() {
1452 struct SocketAddrVisitor
;
1454 impl<'de
> Visitor
<'de
> for SocketAddrVisitor
{
1457 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1458 formatter
.write_str($expecting
)
1461 fn visit_str
<E
>(self, s
: &str) -> Result
<Self::Value
, E
>
1465 s
.parse().map_err(Error
::custom
)
1469 deserializer
.deserialize_str(SocketAddrVisitor
)
1471 <(_
, u16)>::deserialize(deserializer
).map(|(ip
, port
)| $
new(ip
, port
))
1478 #[cfg(feature = "std")]
1479 impl<'de
> Deserialize
<'de
> for net
::SocketAddr
{
1480 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1482 D
: Deserializer
<'de
>,
1484 if deserializer
.is_human_readable() {
1485 struct SocketAddrVisitor
;
1487 impl<'de
> Visitor
<'de
> for SocketAddrVisitor
{
1488 type Value
= net
::SocketAddr
;
1490 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1491 formatter
.write_str("socket address")
1494 fn visit_str
<E
>(self, s
: &str) -> Result
<Self::Value
, E
>
1498 s
.parse().map_err(Error
::custom
)
1502 deserializer
.deserialize_str(SocketAddrVisitor
)
1504 use lib
::net
::SocketAddr
;
1506 SocketAddr
SocketAddrKind (V4
; b
"V4"; 0, V6
; b
"V6"; 1)
1514 #[cfg(feature = "std")]
1515 parse_socket_impl
!("IPv4 socket address" net
::SocketAddrV4
, net
::SocketAddrV4
::new
);
1517 #[cfg(feature = "std")]
1518 parse_socket_impl
!("IPv6 socket address" net
::SocketAddrV6
, |ip
, port
| net
::SocketAddrV6
::new(
1522 ////////////////////////////////////////////////////////////////////////////////
1524 #[cfg(feature = "std")]
1527 #[cfg(feature = "std")]
1528 impl<'a
> Visitor
<'a
> for PathVisitor
{
1529 type Value
= &'a Path
;
1531 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1532 formatter
.write_str("a borrowed path")
1535 fn visit_borrowed_str
<E
>(self, v
: &'a
str) -> Result
<Self::Value
, E
>
1542 fn visit_borrowed_bytes
<E
>(self, v
: &'a
[u8]) -> Result
<Self::Value
, E
>
1548 .map_err(|_
| Error
::invalid_value(Unexpected
::Bytes(v
), &self))
1552 #[cfg(feature = "std")]
1553 impl<'de
: 'a
, 'a
> Deserialize
<'de
> for &'a Path
{
1554 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1556 D
: Deserializer
<'de
>,
1558 deserializer
.deserialize_str(PathVisitor
)
1562 #[cfg(feature = "std")]
1563 struct PathBufVisitor
;
1565 #[cfg(feature = "std")]
1566 impl<'de
> Visitor
<'de
> for PathBufVisitor
{
1567 type Value
= PathBuf
;
1569 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1570 formatter
.write_str("path string")
1573 fn visit_str
<E
>(self, v
: &str) -> Result
<Self::Value
, E
>
1580 fn visit_string
<E
>(self, v
: String
) -> Result
<Self::Value
, E
>
1587 fn visit_bytes
<E
>(self, v
: &[u8]) -> Result
<Self::Value
, E
>
1593 .map_err(|_
| Error
::invalid_value(Unexpected
::Bytes(v
), &self))
1596 fn visit_byte_buf
<E
>(self, v
: Vec
<u8>) -> Result
<Self::Value
, E
>
1600 String
::from_utf8(v
)
1602 .map_err(|e
| Error
::invalid_value(Unexpected
::Bytes(&e
.into_bytes()), &self))
1606 #[cfg(feature = "std")]
1607 impl<'de
> Deserialize
<'de
> for PathBuf
{
1608 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1610 D
: Deserializer
<'de
>,
1612 deserializer
.deserialize_string(PathBufVisitor
)
1616 #[cfg(all(feature = "std", de_boxed_path))]
1617 forwarded_impl
!((), Box
<Path
>, PathBuf
::into_boxed_path
);
1619 ////////////////////////////////////////////////////////////////////////////////
1621 // If this were outside of the serde crate, it would just use:
1623 // #[derive(Deserialize)]
1624 // #[serde(variant_identifier)]
1625 #[cfg(all(feature = "std", any(unix, windows)))]
1626 variant_identifier
! {
1627 OsStringKind (Unix
; b
"Unix"; 0, Windows
; b
"Windows"; 1)
1628 "`Unix` or `Windows`",
1632 #[cfg(all(feature = "std", any(unix, windows)))]
1633 struct OsStringVisitor
;
1635 #[cfg(all(feature = "std", any(unix, windows)))]
1636 impl<'de
> Visitor
<'de
> for OsStringVisitor
{
1637 type Value
= OsString
;
1639 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1640 formatter
.write_str("os string")
1644 fn visit_enum
<A
>(self, data
: A
) -> Result
<Self::Value
, A
::Error
>
1648 use std
::os
::unix
::ffi
::OsStringExt
;
1650 match try
!(data
.variant()) {
1651 (OsStringKind
::Unix
, v
) => v
.newtype_variant().map(OsString
::from_vec
),
1652 (OsStringKind
::Windows
, _
) => Err(Error
::custom(
1653 "cannot deserialize Windows OS string on Unix",
1659 fn visit_enum
<A
>(self, data
: A
) -> Result
<Self::Value
, A
::Error
>
1663 use std
::os
::windows
::ffi
::OsStringExt
;
1665 match try
!(data
.variant()) {
1666 (OsStringKind
::Windows
, v
) => v
1667 .newtype_variant
::<Vec
<u16>>()
1668 .map(|vec
| OsString
::from_wide(&vec
)),
1669 (OsStringKind
::Unix
, _
) => Err(Error
::custom(
1670 "cannot deserialize Unix OS string on Windows",
1676 #[cfg(all(feature = "std", any(unix, windows)))]
1677 impl<'de
> Deserialize
<'de
> for OsString
{
1678 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1680 D
: Deserializer
<'de
>,
1682 deserializer
.deserialize_enum("OsString", OSSTR_VARIANTS
, OsStringVisitor
)
1686 ////////////////////////////////////////////////////////////////////////////////
1688 #[cfg(any(feature = "std", feature = "alloc"))]
1689 forwarded_impl
!((T
), Box
<T
>, Box
::new
);
1691 #[cfg(any(feature = "std", feature = "alloc"))]
1692 forwarded_impl
!((T
), Box
<[T
]>, Vec
::into_boxed_slice
);
1694 #[cfg(any(feature = "std", feature = "alloc"))]
1695 forwarded_impl
!((), Box
<str>, String
::into_boxed_str
);
1700 any(feature
= "std", feature
= "alloc")
1703 /// This impl requires the [`"rc"`] Cargo feature of Serde.
1705 /// Deserializing a data structure containing `Arc` will not attempt to
1706 /// deduplicate `Arc` references to the same data. Every deserialized `Arc`
1707 /// will end up with a strong count of 1.
1709 /// [`"rc"`]: https://serde.rs/feature-flags.html#-features-rc
1710 (T
), Arc
<T
>, Arc
::new
1716 any(feature
= "std", feature
= "alloc")
1719 /// This impl requires the [`"rc"`] Cargo feature of Serde.
1721 /// Deserializing a data structure containing `Rc` will not attempt to
1722 /// deduplicate `Rc` references to the same data. Every deserialized `Rc`
1723 /// will end up with a strong count of 1.
1725 /// [`"rc"`]: https://serde.rs/feature-flags.html#-features-rc
1729 #[cfg(any(feature = "std", feature = "alloc"))]
1730 impl<'de
, 'a
, T
: ?Sized
> Deserialize
<'de
> for Cow
<'a
, T
>
1733 T
::Owned
: Deserialize
<'de
>,
1736 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1738 D
: Deserializer
<'de
>,
1740 T
::Owned
::deserialize(deserializer
).map(Cow
::Owned
)
1744 ////////////////////////////////////////////////////////////////////////////////
1746 /// This impl requires the [`"rc"`] Cargo feature of Serde. The resulting
1747 /// `Weak<T>` has a reference count of 0 and cannot be upgraded.
1749 /// [`"rc"`]: https://serde.rs/feature-flags.html#-features-rc
1750 #[cfg(all(feature = "rc", any(feature = "std", feature = "alloc")))]
1751 impl<'de
, T
: ?Sized
> Deserialize
<'de
> for RcWeak
<T
>
1753 T
: Deserialize
<'de
>,
1755 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1757 D
: Deserializer
<'de
>,
1759 try
!(Option
::<T
>::deserialize(deserializer
));
1764 /// This impl requires the [`"rc"`] Cargo feature of Serde. The resulting
1765 /// `Weak<T>` has a reference count of 0 and cannot be upgraded.
1767 /// [`"rc"`]: https://serde.rs/feature-flags.html#-features-rc
1768 #[cfg(all(feature = "rc", any(feature = "std", feature = "alloc")))]
1769 impl<'de
, T
: ?Sized
> Deserialize
<'de
> for ArcWeak
<T
>
1771 T
: Deserialize
<'de
>,
1773 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1775 D
: Deserializer
<'de
>,
1777 try
!(Option
::<T
>::deserialize(deserializer
));
1782 ////////////////////////////////////////////////////////////////////////////////
1784 #[cfg(all(de_rc_dst, feature = "rc", any(feature = "std", feature = "alloc")))]
1785 macro_rules
! box_forwarded_impl
{
1787 $
(#[doc = $doc:tt])*
1791 impl<'de
, T
: ?Sized
> Deserialize
<'de
> for $t
<T
>
1793 Box
<T
>: Deserialize
<'de
>,
1795 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1797 D
: Deserializer
<'de
>,
1799 Box
::deserialize(deserializer
).map(Into
::into
)
1805 #[cfg(all(de_rc_dst, feature = "rc", any(feature = "std", feature = "alloc")))]
1806 box_forwarded_impl
! {
1807 /// This impl requires the [`"rc"`] Cargo feature of Serde.
1809 /// Deserializing a data structure containing `Rc` will not attempt to
1810 /// deduplicate `Rc` references to the same data. Every deserialized `Rc`
1811 /// will end up with a strong count of 1.
1813 /// [`"rc"`]: https://serde.rs/feature-flags.html#-features-rc
1817 #[cfg(all(de_rc_dst, feature = "rc", any(feature = "std", feature = "alloc")))]
1818 box_forwarded_impl
! {
1819 /// This impl requires the [`"rc"`] Cargo feature of Serde.
1821 /// Deserializing a data structure containing `Arc` will not attempt to
1822 /// deduplicate `Arc` references to the same data. Every deserialized `Arc`
1823 /// will end up with a strong count of 1.
1825 /// [`"rc"`]: https://serde.rs/feature-flags.html#-features-rc
1829 ////////////////////////////////////////////////////////////////////////////////
1831 impl<'de
, T
> Deserialize
<'de
> for Cell
<T
>
1833 T
: Deserialize
<'de
> + Copy
,
1835 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1837 D
: Deserializer
<'de
>,
1839 T
::deserialize(deserializer
).map(Cell
::new
)
1843 forwarded_impl
!((T
), RefCell
<T
>, RefCell
::new
);
1845 #[cfg(feature = "std")]
1846 forwarded_impl
!((T
), Mutex
<T
>, Mutex
::new
);
1848 #[cfg(feature = "std")]
1849 forwarded_impl
!((T
), RwLock
<T
>, RwLock
::new
);
1851 ////////////////////////////////////////////////////////////////////////////////
1853 // This is a cleaned-up version of the impl generated by:
1855 // #[derive(Deserialize)]
1856 // #[serde(deny_unknown_fields)]
1857 // struct Duration {
1861 #[cfg(any(core_duration, feature = "std"))]
1862 impl<'de
> Deserialize
<'de
> for Duration
{
1863 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1865 D
: Deserializer
<'de
>,
1867 // If this were outside of the serde crate, it would just use:
1869 // #[derive(Deserialize)]
1870 // #[serde(field_identifier, rename_all = "lowercase")]
1876 impl<'de
> Deserialize
<'de
> for Field
{
1877 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1879 D
: Deserializer
<'de
>,
1881 struct FieldVisitor
;
1883 impl<'de
> Visitor
<'de
> for FieldVisitor
{
1886 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1887 formatter
.write_str("`secs` or `nanos`")
1890 fn visit_str
<E
>(self, value
: &str) -> Result
<Self::Value
, E
>
1895 "secs" => Ok(Field
::Secs
),
1896 "nanos" => Ok(Field
::Nanos
),
1897 _
=> Err(Error
::unknown_field(value
, FIELDS
)),
1901 fn visit_bytes
<E
>(self, value
: &[u8]) -> Result
<Self::Value
, E
>
1906 b
"secs" => Ok(Field
::Secs
),
1907 b
"nanos" => Ok(Field
::Nanos
),
1909 let value
= ::export
::from_utf8_lossy(value
);
1910 Err(Error
::unknown_field(&value
, FIELDS
))
1916 deserializer
.deserialize_identifier(FieldVisitor
)
1920 struct DurationVisitor
;
1922 impl<'de
> Visitor
<'de
> for DurationVisitor
{
1923 type Value
= Duration
;
1925 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1926 formatter
.write_str("struct Duration")
1929 fn visit_seq
<A
>(self, mut seq
: A
) -> Result
<Self::Value
, A
::Error
>
1933 let secs
: u64 = match try
!(seq
.next_element()) {
1934 Some(value
) => value
,
1936 return Err(Error
::invalid_length(0, &self));
1939 let nanos
: u32 = match try
!(seq
.next_element()) {
1940 Some(value
) => value
,
1942 return Err(Error
::invalid_length(1, &self));
1945 Ok(Duration
::new(secs
, nanos
))
1948 fn visit_map
<A
>(self, mut map
: A
) -> Result
<Self::Value
, A
::Error
>
1952 let mut secs
: Option
<u64> = None
;
1953 let mut nanos
: Option
<u32> = None
;
1954 while let Some(key
) = try
!(map
.next_key()) {
1958 return Err(<A
::Error
as Error
>::duplicate_field("secs"));
1960 secs
= Some(try
!(map
.next_value()));
1963 if nanos
.is_some() {
1964 return Err(<A
::Error
as Error
>::duplicate_field("nanos"));
1966 nanos
= Some(try
!(map
.next_value()));
1970 let secs
= match secs
{
1972 None
=> return Err(<A
::Error
as Error
>::missing_field("secs")),
1974 let nanos
= match nanos
{
1975 Some(nanos
) => nanos
,
1976 None
=> return Err(<A
::Error
as Error
>::missing_field("nanos")),
1978 Ok(Duration
::new(secs
, nanos
))
1982 const FIELDS
: &'
static [&'
static str] = &["secs", "nanos"];
1983 deserializer
.deserialize_struct("Duration", FIELDS
, DurationVisitor
)
1987 ////////////////////////////////////////////////////////////////////////////////
1989 #[cfg(feature = "std")]
1990 impl<'de
> Deserialize
<'de
> for SystemTime
{
1991 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
1993 D
: Deserializer
<'de
>,
2001 impl<'de
> Deserialize
<'de
> for Field
{
2002 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
2004 D
: Deserializer
<'de
>,
2006 struct FieldVisitor
;
2008 impl<'de
> Visitor
<'de
> for FieldVisitor
{
2011 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
2012 formatter
.write_str("`secs_since_epoch` or `nanos_since_epoch`")
2015 fn visit_str
<E
>(self, value
: &str) -> Result
<Self::Value
, E
>
2020 "secs_since_epoch" => Ok(Field
::Secs
),
2021 "nanos_since_epoch" => Ok(Field
::Nanos
),
2022 _
=> Err(Error
::unknown_field(value
, FIELDS
)),
2026 fn visit_bytes
<E
>(self, value
: &[u8]) -> Result
<Self::Value
, E
>
2031 b
"secs_since_epoch" => Ok(Field
::Secs
),
2032 b
"nanos_since_epoch" => Ok(Field
::Nanos
),
2034 let value
= String
::from_utf8_lossy(value
);
2035 Err(Error
::unknown_field(&value
, FIELDS
))
2041 deserializer
.deserialize_identifier(FieldVisitor
)
2045 struct DurationVisitor
;
2047 impl<'de
> Visitor
<'de
> for DurationVisitor
{
2048 type Value
= Duration
;
2050 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
2051 formatter
.write_str("struct SystemTime")
2054 fn visit_seq
<A
>(self, mut seq
: A
) -> Result
<Self::Value
, A
::Error
>
2058 let secs
: u64 = match try
!(seq
.next_element()) {
2059 Some(value
) => value
,
2061 return Err(Error
::invalid_length(0, &self));
2064 let nanos
: u32 = match try
!(seq
.next_element()) {
2065 Some(value
) => value
,
2067 return Err(Error
::invalid_length(1, &self));
2070 Ok(Duration
::new(secs
, nanos
))
2073 fn visit_map
<A
>(self, mut map
: A
) -> Result
<Self::Value
, A
::Error
>
2077 let mut secs
: Option
<u64> = None
;
2078 let mut nanos
: Option
<u32> = None
;
2079 while let Some(key
) = try
!(map
.next_key()) {
2083 return Err(<A
::Error
as Error
>::duplicate_field(
2087 secs
= Some(try
!(map
.next_value()));
2090 if nanos
.is_some() {
2091 return Err(<A
::Error
as Error
>::duplicate_field(
2092 "nanos_since_epoch",
2095 nanos
= Some(try
!(map
.next_value()));
2099 let secs
= match secs
{
2101 None
=> return Err(<A
::Error
as Error
>::missing_field("secs_since_epoch")),
2103 let nanos
= match nanos
{
2104 Some(nanos
) => nanos
,
2105 None
=> return Err(<A
::Error
as Error
>::missing_field("nanos_since_epoch")),
2107 Ok(Duration
::new(secs
, nanos
))
2111 const FIELDS
: &'
static [&'
static str] = &["secs_since_epoch", "nanos_since_epoch"];
2112 let duration
= try
!(deserializer
.deserialize_struct("SystemTime", FIELDS
, DurationVisitor
));
2113 Ok(UNIX_EPOCH
+ duration
)
2117 ////////////////////////////////////////////////////////////////////////////////
2121 // #[derive(Deserialize)]
2122 // #[serde(deny_unknown_fields)]
2127 impl<'de
, Idx
> Deserialize
<'de
> for Range
<Idx
>
2129 Idx
: Deserialize
<'de
>,
2131 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
2133 D
: Deserializer
<'de
>,
2135 let (start
, end
) = deserializer
.deserialize_struct(
2138 range
::RangeVisitor
{
2139 expecting
: "struct Range",
2140 phantom
: PhantomData
,
2147 #[cfg(range_inclusive)]
2148 impl<'de
, Idx
> Deserialize
<'de
> for RangeInclusive
<Idx
>
2150 Idx
: Deserialize
<'de
>,
2152 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
2154 D
: Deserializer
<'de
>,
2156 let (start
, end
) = deserializer
.deserialize_struct(
2159 range
::RangeVisitor
{
2160 expecting
: "struct RangeInclusive",
2161 phantom
: PhantomData
,
2164 Ok(RangeInclusive
::new(start
, end
))
2171 use de
::{Deserialize, Deserializer, Error, MapAccess, SeqAccess, Visitor}
;
2173 pub const FIELDS
: &'
static [&'
static str] = &["start", "end"];
2175 // If this were outside of the serde crate, it would just use:
2177 // #[derive(Deserialize)]
2178 // #[serde(field_identifier, rename_all = "lowercase")]
2184 impl<'de
> Deserialize
<'de
> for Field
{
2185 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
2187 D
: Deserializer
<'de
>,
2189 struct FieldVisitor
;
2191 impl<'de
> Visitor
<'de
> for FieldVisitor
{
2194 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
2195 formatter
.write_str("`start` or `end`")
2198 fn visit_str
<E
>(self, value
: &str) -> Result
<Self::Value
, E
>
2203 "start" => Ok(Field
::Start
),
2204 "end" => Ok(Field
::End
),
2205 _
=> Err(Error
::unknown_field(value
, FIELDS
)),
2209 fn visit_bytes
<E
>(self, value
: &[u8]) -> Result
<Self::Value
, E
>
2214 b
"start" => Ok(Field
::Start
),
2215 b
"end" => Ok(Field
::End
),
2217 let value
= ::export
::from_utf8_lossy(value
);
2218 Err(Error
::unknown_field(&value
, FIELDS
))
2224 deserializer
.deserialize_identifier(FieldVisitor
)
2228 pub struct RangeVisitor
<Idx
> {
2229 pub expecting
: &'
static str,
2230 pub phantom
: PhantomData
<Idx
>,
2233 impl<'de
, Idx
> Visitor
<'de
> for RangeVisitor
<Idx
>
2235 Idx
: Deserialize
<'de
>,
2237 type Value
= (Idx
, Idx
);
2239 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
2240 formatter
.write_str(self.expecting
)
2243 fn visit_seq
<A
>(self, mut seq
: A
) -> Result
<Self::Value
, A
::Error
>
2247 let start
: Idx
= match try
!(seq
.next_element()) {
2248 Some(value
) => value
,
2250 return Err(Error
::invalid_length(0, &self));
2253 let end
: Idx
= match try
!(seq
.next_element()) {
2254 Some(value
) => value
,
2256 return Err(Error
::invalid_length(1, &self));
2262 fn visit_map
<A
>(self, mut map
: A
) -> Result
<Self::Value
, A
::Error
>
2266 let mut start
: Option
<Idx
> = None
;
2267 let mut end
: Option
<Idx
> = None
;
2268 while let Some(key
) = try
!(map
.next_key()) {
2271 if start
.is_some() {
2272 return Err(<A
::Error
as Error
>::duplicate_field("start"));
2274 start
= Some(try
!(map
.next_value()));
2278 return Err(<A
::Error
as Error
>::duplicate_field("end"));
2280 end
= Some(try
!(map
.next_value()));
2284 let start
= match start
{
2285 Some(start
) => start
,
2286 None
=> return Err(<A
::Error
as Error
>::missing_field("start")),
2288 let end
= match end
{
2290 None
=> return Err(<A
::Error
as Error
>::missing_field("end")),
2297 ////////////////////////////////////////////////////////////////////////////////
2299 #[cfg(any(ops_bound, collections_bound))]
2300 impl<'de
, T
> Deserialize
<'de
> for Bound
<T
>
2302 T
: Deserialize
<'de
>,
2304 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
2306 D
: Deserializer
<'de
>,
2314 impl<'de
> Deserialize
<'de
> for Field
{
2316 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
2318 D
: Deserializer
<'de
>,
2320 struct FieldVisitor
;
2322 impl<'de
> Visitor
<'de
> for FieldVisitor
{
2325 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
2326 formatter
.write_str("`Unbounded`, `Included` or `Excluded`")
2329 fn visit_u32
<E
>(self, value
: u32) -> Result
<Self::Value
, E
>
2334 0 => Ok(Field
::Unbounded
),
2335 1 => Ok(Field
::Included
),
2336 2 => Ok(Field
::Excluded
),
2337 _
=> Err(Error
::invalid_value(
2338 Unexpected
::Unsigned(value
as u64),
2344 fn visit_str
<E
>(self, value
: &str) -> Result
<Self::Value
, E
>
2349 "Unbounded" => Ok(Field
::Unbounded
),
2350 "Included" => Ok(Field
::Included
),
2351 "Excluded" => Ok(Field
::Excluded
),
2352 _
=> Err(Error
::unknown_variant(value
, VARIANTS
)),
2356 fn visit_bytes
<E
>(self, value
: &[u8]) -> Result
<Self::Value
, E
>
2361 b
"Unbounded" => Ok(Field
::Unbounded
),
2362 b
"Included" => Ok(Field
::Included
),
2363 b
"Excluded" => Ok(Field
::Excluded
),
2364 _
=> match str::from_utf8(value
) {
2365 Ok(value
) => Err(Error
::unknown_variant(value
, VARIANTS
)),
2367 Err(Error
::invalid_value(Unexpected
::Bytes(value
), &self))
2374 deserializer
.deserialize_identifier(FieldVisitor
)
2378 struct BoundVisitor
<T
>(PhantomData
<Bound
<T
>>);
2380 impl<'de
, T
> Visitor
<'de
> for BoundVisitor
<T
>
2382 T
: Deserialize
<'de
>,
2384 type Value
= Bound
<T
>;
2386 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
2387 formatter
.write_str("enum Bound")
2390 fn visit_enum
<A
>(self, data
: A
) -> Result
<Self::Value
, A
::Error
>
2394 match try
!(data
.variant()) {
2395 (Field
::Unbounded
, v
) => v
.unit_variant().map(|()| Bound
::Unbounded
),
2396 (Field
::Included
, v
) => v
.newtype_variant().map(Bound
::Included
),
2397 (Field
::Excluded
, v
) => v
.newtype_variant().map(Bound
::Excluded
),
2402 const VARIANTS
: &'
static [&'
static str] = &["Unbounded", "Included", "Excluded"];
2404 deserializer
.deserialize_enum("Bound", VARIANTS
, BoundVisitor(PhantomData
))
2408 ////////////////////////////////////////////////////////////////////////////////
2410 macro_rules
! nonzero_integers
{
2411 ( $
( $T
: ident
, )+ ) => {
2414 impl<'de
> Deserialize
<'de
> for num
::$T
{
2415 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
2417 D
: Deserializer
<'de
>,
2419 let value
= try
!(Deserialize
::deserialize(deserializer
));
2420 match <num
::$T
>::new(value
) {
2421 Some(nonzero
) => Ok(nonzero
),
2422 None
=> Err(Error
::custom("expected a non-zero value")),
2438 #[cfg(num_nonzero_signed)]
2447 // Currently 128-bit integers do not work on Emscripten targets so we need an
2448 // additional `#[cfg]`
2449 serde_if_integer128
! {
2454 #[cfg(num_nonzero_signed)]
2460 ////////////////////////////////////////////////////////////////////////////////
2462 impl<'de
, T
, E
> Deserialize
<'de
> for Result
<T
, E
>
2464 T
: Deserialize
<'de
>,
2465 E
: Deserialize
<'de
>,
2467 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
2469 D
: Deserializer
<'de
>,
2471 // If this were outside of the serde crate, it would just use:
2473 // #[derive(Deserialize)]
2474 // #[serde(variant_identifier)]
2480 impl<'de
> Deserialize
<'de
> for Field
{
2482 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
2484 D
: Deserializer
<'de
>,
2486 struct FieldVisitor
;
2488 impl<'de
> Visitor
<'de
> for FieldVisitor
{
2491 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
2492 formatter
.write_str("`Ok` or `Err`")
2495 fn visit_u32
<E
>(self, value
: u32) -> Result
<Self::Value
, E
>
2501 1 => Ok(Field
::Err
),
2502 _
=> Err(Error
::invalid_value(
2503 Unexpected
::Unsigned(value
as u64),
2509 fn visit_str
<E
>(self, value
: &str) -> Result
<Self::Value
, E
>
2514 "Ok" => Ok(Field
::Ok
),
2515 "Err" => Ok(Field
::Err
),
2516 _
=> Err(Error
::unknown_variant(value
, VARIANTS
)),
2520 fn visit_bytes
<E
>(self, value
: &[u8]) -> Result
<Self::Value
, E
>
2525 b
"Ok" => Ok(Field
::Ok
),
2526 b
"Err" => Ok(Field
::Err
),
2527 _
=> match str::from_utf8(value
) {
2528 Ok(value
) => Err(Error
::unknown_variant(value
, VARIANTS
)),
2530 Err(Error
::invalid_value(Unexpected
::Bytes(value
), &self))
2537 deserializer
.deserialize_identifier(FieldVisitor
)
2541 struct ResultVisitor
<T
, E
>(PhantomData
<Result
<T
, E
>>);
2543 impl<'de
, T
, E
> Visitor
<'de
> for ResultVisitor
<T
, E
>
2545 T
: Deserialize
<'de
>,
2546 E
: Deserialize
<'de
>,
2548 type Value
= Result
<T
, E
>;
2550 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
2551 formatter
.write_str("enum Result")
2554 fn visit_enum
<A
>(self, data
: A
) -> Result
<Self::Value
, A
::Error
>
2558 match try
!(data
.variant()) {
2559 (Field
::Ok
, v
) => v
.newtype_variant().map(Ok
),
2560 (Field
::Err
, v
) => v
.newtype_variant().map(Err
),
2565 const VARIANTS
: &'
static [&'
static str] = &["Ok", "Err"];
2567 deserializer
.deserialize_enum("Result", VARIANTS
, ResultVisitor(PhantomData
))
2571 ////////////////////////////////////////////////////////////////////////////////
2573 #[cfg(feature = "std")]
2574 impl<'de
, T
> Deserialize
<'de
> for Wrapping
<T
>
2576 T
: Deserialize
<'de
>,
2578 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
2580 D
: Deserializer
<'de
>,
2582 Deserialize
::deserialize(deserializer
).map(Wrapping
)
2586 #[cfg(all(feature = "std", std_atomic))]
2587 macro_rules
! atomic_impl
{
2588 ($
($ty
:ident
)*) => {
2590 impl<'de
> Deserialize
<'de
> for $ty
{
2591 fn deserialize
<D
>(deserializer
: D
) -> Result
<Self, D
::Error
>
2593 D
: Deserializer
<'de
>,
2595 Deserialize
::deserialize(deserializer
).map(Self::new
)
2602 #[cfg(all(feature = "std", std_atomic))]
2605 AtomicI8 AtomicI16 AtomicI32 AtomicIsize
2606 AtomicU8 AtomicU16 AtomicU32 AtomicUsize
2609 #[cfg(all(feature = "std", std_atomic64))]