1 // Copyright 2017 Serde Developers
3 // Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
4 // http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
5 // <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
6 // option. This file may not be copied, modified, or distributed
7 // except according to those terms.
18 use serde
::de
::{Deserialize
, DeserializeSeed
, EnumAccess
, Expected
, IntoDeserializer
, MapAccess
,
19 SeqAccess
, Unexpected
, VariantAccess
, Visitor
};
26 #[cfg(feature = "arbitrary_precision")]
29 #[cfg(feature = "arbitrary_precision")]
30 use number
::{NumberFromString, SERDE_STRUCT_FIELD_NAME}
;
32 impl<'de
> Deserialize
<'de
> for Value
{
34 fn deserialize
<D
>(deserializer
: D
) -> Result
<Value
, D
::Error
>
36 D
: serde
::Deserializer
<'de
>,
40 impl<'de
> Visitor
<'de
> for ValueVisitor
{
43 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
44 formatter
.write_str("any valid JSON value")
48 fn visit_bool
<E
>(self, value
: bool
) -> Result
<Value
, E
> {
49 Ok(Value
::Bool(value
))
53 fn visit_i64
<E
>(self, value
: i64) -> Result
<Value
, E
> {
54 Ok(Value
::Number(value
.into()))
58 fn visit_u64
<E
>(self, value
: u64) -> Result
<Value
, E
> {
59 Ok(Value
::Number(value
.into()))
63 fn visit_f64
<E
>(self, value
: f64) -> Result
<Value
, E
> {
64 Ok(Number
::from_f64(value
).map_or(Value
::Null
, Value
::Number
))
68 fn visit_str
<E
>(self, value
: &str) -> Result
<Value
, E
>
72 self.visit_string(String
::from(value
))
76 fn visit_string
<E
>(self, value
: String
) -> Result
<Value
, E
> {
77 Ok(Value
::String(value
))
81 fn visit_none
<E
>(self) -> Result
<Value
, E
> {
86 fn visit_some
<D
>(self, deserializer
: D
) -> Result
<Value
, D
::Error
>
88 D
: serde
::Deserializer
<'de
>,
90 Deserialize
::deserialize(deserializer
)
94 fn visit_unit
<E
>(self) -> Result
<Value
, E
> {
99 fn visit_seq
<V
>(self, mut visitor
: V
) -> Result
<Value
, V
::Error
>
103 let mut vec
= Vec
::new();
105 while let Some(elem
) = try
!(visitor
.next_element()) {
109 Ok(Value
::Array(vec
))
112 #[cfg(not(feature = "arbitrary_precision"))]
113 fn visit_map
<V
>(self, mut visitor
: V
) -> Result
<Value
, V
::Error
>
117 let mut values
= Map
::new();
119 while let Some((key
, value
)) = try
!(visitor
.next_entry()) {
120 values
.insert(key
, value
);
123 Ok(Value
::Object(values
))
126 #[cfg(feature = "arbitrary_precision")]
127 fn visit_map
<V
>(self, mut visitor
: V
) -> Result
<Value
, V
::Error
>
131 let mut key
= String
::new();
132 let number
= visitor
.next_key_seed(NumberOrObject { key: &mut key }
)?
;
135 let number
: NumberFromString
= visitor
.next_value()?
;
136 return Ok(Value
::Number(number
.value
));
138 None
=> return Ok(Value
::Object(Map
::new())),
142 let mut values
= Map
::new();
144 values
.insert(key
, try
!(visitor
.next_value()));
145 while let Some((key
, value
)) = try
!(visitor
.next_entry()) {
146 values
.insert(key
, value
);
149 Ok(Value
::Object(values
))
153 deserializer
.deserialize_any(ValueVisitor
)
157 struct WriterFormatter
<'a
, 'b
: 'a
> {
158 inner
: &'a
mut fmt
::Formatter
<'b
>,
161 impl<'a
, 'b
> io
::Write
for WriterFormatter
<'a
, 'b
> {
162 fn write(&mut self, buf
: &[u8]) -> io
::Result
<usize> {
163 fn io_error
<E
>(_
: E
) -> io
::Error
{
164 // Value does not matter because fmt::Debug and fmt::Display impls
165 // below just map it to fmt::Error
166 io
::Error
::new(io
::ErrorKind
::Other
, "fmt error")
168 let s
= try
!(str::from_utf8(buf
).map_err(io_error
));
169 try
!(self.inner
.write_str(s
).map_err(io_error
));
173 fn flush(&mut self) -> io
::Result
<()> {
178 impl fmt
::Display
for Value
{
179 /// Display a JSON value as a string.
183 /// # extern crate serde_json;
186 /// let json = json!({ "city": "London", "street": "10 Downing Street" });
188 /// // Compact format:
190 /// // {"city":"London","street":"10 Downing Street"}
191 /// let compact = format!("{}", json);
192 /// assert_eq!(compact,
193 /// "{\"city\":\"London\",\"street\":\"10 Downing Street\"}");
195 /// // Pretty format:
198 /// // "city": "London",
199 /// // "street": "10 Downing Street"
201 /// let pretty = format!("{:#}", json);
202 /// assert_eq!(pretty,
203 /// "{\n \"city\": \"London\",\n \"street\": \"10 Downing Street\"\n}");
206 fn fmt(&self, f
: &mut fmt
::Formatter
) -> fmt
::Result
{
207 let alternate
= f
.alternate();
208 let mut wr
= WriterFormatter { inner: f }
;
211 super::super::ser
::to_writer_pretty(&mut wr
, self).map_err(|_
| fmt
::Error
)
214 super::super::ser
::to_writer(&mut wr
, self).map_err(|_
| fmt
::Error
)
219 impl str::FromStr
for Value
{
221 fn from_str(s
: &str) -> Result
<Value
, Error
> {
222 super::super::de
::from_str(s
)
226 macro_rules
! deserialize_prim_number
{
228 #[cfg(not(feature = "arbitrary_precision"))]
229 fn $method
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Error
>
234 Value
::Number(n
) => n
.deserialize_any(visitor
),
235 _
=> Err(self.invalid_type(&visitor
)),
239 #[cfg(feature = "arbitrary_precision")]
240 fn $method
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Error
>
245 Value
::Number(n
) => n
.$
method(visitor
),
246 _
=> self.deserialize_any(visitor
),
252 fn visit_array
<'de
, V
>(array
: Vec
<Value
>, visitor
: V
) -> Result
<V
::Value
, Error
>
256 let len
= array
.len();
257 let mut deserializer
= SeqDeserializer
::new(array
);
258 let seq
= try
!(visitor
.visit_seq(&mut deserializer
));
259 let remaining
= deserializer
.iter
.len();
263 Err(serde
::de
::Error
::invalid_length(
265 &"fewer elements in array",
270 fn visit_object
<'de
, V
>(object
: Map
<String
, Value
>, visitor
: V
) -> Result
<V
::Value
, Error
>
274 let len
= object
.len();
275 let mut deserializer
= MapDeserializer
::new(object
);
276 let map
= try
!(visitor
.visit_map(&mut deserializer
));
277 let remaining
= deserializer
.iter
.len();
281 Err(serde
::de
::Error
::invalid_length(
283 &"fewer elements in map",
288 impl<'de
> serde
::Deserializer
<'de
> for Value
{
292 fn deserialize_any
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Error
>
297 Value
::Null
=> visitor
.visit_unit(),
298 Value
::Bool(v
) => visitor
.visit_bool(v
),
299 Value
::Number(n
) => n
.deserialize_any(visitor
),
300 Value
::String(v
) => visitor
.visit_string(v
),
301 Value
::Array(v
) => visit_array(v
, visitor
),
302 Value
::Object(v
) => visit_object(v
, visitor
),
306 deserialize_prim_number
!(deserialize_i8
);
307 deserialize_prim_number
!(deserialize_i16
);
308 deserialize_prim_number
!(deserialize_i32
);
309 deserialize_prim_number
!(deserialize_i64
);
310 deserialize_prim_number
!(deserialize_u8
);
311 deserialize_prim_number
!(deserialize_u16
);
312 deserialize_prim_number
!(deserialize_u32
);
313 deserialize_prim_number
!(deserialize_u64
);
314 deserialize_prim_number
!(deserialize_f32
);
315 deserialize_prim_number
!(deserialize_f64
);
318 fn deserialize_option
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Error
>
323 Value
::Null
=> visitor
.visit_none(),
324 _
=> visitor
.visit_some(self),
329 fn deserialize_enum
<V
>(
332 _variants
: &'
static [&'
static str],
334 ) -> Result
<V
::Value
, Error
>
338 let (variant
, value
) = match self {
339 Value
::Object(value
) => {
340 let mut iter
= value
.into_iter();
341 let (variant
, value
) = match iter
.next() {
344 return Err(serde
::de
::Error
::invalid_value(
346 &"map with a single key",
350 // enums are encoded in json as maps with a single key:value pair
351 if iter
.next().is_some() {
352 return Err(serde
::de
::Error
::invalid_value(
354 &"map with a single key",
357 (variant
, Some(value
))
359 Value
::String(variant
) => (variant
, None
),
361 return Err(serde
::de
::Error
::invalid_type(
368 visitor
.visit_enum(EnumDeserializer
{
375 fn deserialize_newtype_struct
<V
>(
379 ) -> Result
<V
::Value
, Self::Error
>
383 visitor
.visit_newtype_struct(self)
386 fn deserialize_bool
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
391 Value
::Bool(v
) => visitor
.visit_bool(v
),
392 _
=> Err(self.invalid_type(&visitor
)),
396 fn deserialize_char
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
400 self.deserialize_string(visitor
)
403 fn deserialize_str
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
407 self.deserialize_string(visitor
)
410 fn deserialize_string
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
415 Value
::String(v
) => visitor
.visit_string(v
),
416 _
=> Err(self.invalid_type(&visitor
)),
420 fn deserialize_bytes
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
424 self.deserialize_byte_buf(visitor
)
427 fn deserialize_byte_buf
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
432 Value
::String(v
) => visitor
.visit_string(v
),
433 Value
::Array(v
) => visit_array(v
, visitor
),
434 _
=> Err(self.invalid_type(&visitor
)),
438 fn deserialize_unit
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
443 Value
::Null
=> visitor
.visit_unit(),
444 _
=> Err(self.invalid_type(&visitor
)),
448 fn deserialize_unit_struct
<V
>(
452 ) -> Result
<V
::Value
, Self::Error
>
456 self.deserialize_unit(visitor
)
459 fn deserialize_seq
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
464 Value
::Array(v
) => visit_array(v
, visitor
),
465 _
=> Err(self.invalid_type(&visitor
)),
469 fn deserialize_tuple
<V
>(self, _len
: usize, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
473 self.deserialize_seq(visitor
)
476 fn deserialize_tuple_struct
<V
>(
481 ) -> Result
<V
::Value
, Self::Error
>
485 self.deserialize_seq(visitor
)
488 fn deserialize_map
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
493 Value
::Object(v
) => visit_object(v
, visitor
),
494 _
=> Err(self.invalid_type(&visitor
)),
498 fn deserialize_struct
<V
>(
501 _fields
: &'
static [&'
static str],
503 ) -> Result
<V
::Value
, Self::Error
>
508 Value
::Array(v
) => visit_array(v
, visitor
),
509 Value
::Object(v
) => visit_object(v
, visitor
),
510 _
=> Err(self.invalid_type(&visitor
)),
514 fn deserialize_identifier
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
518 self.deserialize_string(visitor
)
521 fn deserialize_ignored_any
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
530 struct EnumDeserializer
{
532 value
: Option
<Value
>,
535 impl<'de
> EnumAccess
<'de
> for EnumDeserializer
{
537 type Variant
= VariantDeserializer
;
539 fn variant_seed
<V
>(self, seed
: V
) -> Result
<(V
::Value
, VariantDeserializer
), Error
>
541 V
: DeserializeSeed
<'de
>,
543 let variant
= self.variant
.into_deserializer();
544 let visitor
= VariantDeserializer { value: self.value }
;
545 seed
.deserialize(variant
).map(|v
| (v
, visitor
))
549 struct VariantDeserializer
{
550 value
: Option
<Value
>,
553 impl<'de
> VariantAccess
<'de
> for VariantDeserializer
{
556 fn unit_variant(self) -> Result
<(), Error
> {
558 Some(value
) => Deserialize
::deserialize(value
),
563 fn newtype_variant_seed
<T
>(self, seed
: T
) -> Result
<T
::Value
, Error
>
565 T
: DeserializeSeed
<'de
>,
568 Some(value
) => seed
.deserialize(value
),
569 None
=> Err(serde
::de
::Error
::invalid_type(
570 Unexpected
::UnitVariant
,
576 fn tuple_variant
<V
>(self, _len
: usize, visitor
: V
) -> Result
<V
::Value
, Error
>
581 Some(Value
::Array(v
)) => {
582 serde
::Deserializer
::deserialize_any(SeqDeserializer
::new(v
), visitor
)
584 Some(other
) => Err(serde
::de
::Error
::invalid_type(
588 None
=> Err(serde
::de
::Error
::invalid_type(
589 Unexpected
::UnitVariant
,
595 fn struct_variant
<V
>(
597 _fields
: &'
static [&'
static str],
599 ) -> Result
<V
::Value
, Error
>
604 Some(Value
::Object(v
)) => {
605 serde
::Deserializer
::deserialize_any(MapDeserializer
::new(v
), visitor
)
607 Some(other
) => Err(serde
::de
::Error
::invalid_type(
611 _
=> Err(serde
::de
::Error
::invalid_type(
612 Unexpected
::UnitVariant
,
619 struct SeqDeserializer
{
620 iter
: vec
::IntoIter
<Value
>,
623 impl SeqDeserializer
{
624 fn new(vec
: Vec
<Value
>) -> Self {
626 iter
: vec
.into_iter(),
631 impl<'de
> serde
::Deserializer
<'de
> for SeqDeserializer
{
635 fn deserialize_any
<V
>(mut self, visitor
: V
) -> Result
<V
::Value
, Error
>
639 let len
= self.iter
.len();
643 let ret
= try
!(visitor
.visit_seq(&mut self));
644 let remaining
= self.iter
.len();
648 Err(serde
::de
::Error
::invalid_length(
650 &"fewer elements in array",
656 forward_to_deserialize_any
! {
657 bool
i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
658 byte_buf option unit unit_struct newtype_struct seq tuple
659 tuple_struct map
struct enum identifier ignored_any
663 impl<'de
> SeqAccess
<'de
> for SeqDeserializer
{
666 fn next_element_seed
<T
>(&mut self, seed
: T
) -> Result
<Option
<T
::Value
>, Error
>
668 T
: DeserializeSeed
<'de
>,
670 match self.iter
.next() {
671 Some(value
) => seed
.deserialize(value
).map(Some
),
676 fn size_hint(&self) -> Option
<usize> {
677 match self.iter
.size_hint() {
678 (lower
, Some(upper
)) if lower
== upper
=> Some(upper
),
684 struct MapDeserializer
{
685 iter
: <Map
<String
, Value
> as IntoIterator
>::IntoIter
,
686 value
: Option
<Value
>,
689 impl MapDeserializer
{
690 fn new(map
: Map
<String
, Value
>) -> Self {
692 iter
: map
.into_iter(),
698 impl<'de
> MapAccess
<'de
> for MapDeserializer
{
701 fn next_key_seed
<T
>(&mut self, seed
: T
) -> Result
<Option
<T
::Value
>, Error
>
703 T
: DeserializeSeed
<'de
>,
705 match self.iter
.next() {
706 Some((key
, value
)) => {
707 self.value
= Some(value
);
708 let key_de
= MapKeyDeserializer
{
709 key
: Cow
::Owned(key
),
711 seed
.deserialize(key_de
).map(Some
)
717 fn next_value_seed
<T
>(&mut self, seed
: T
) -> Result
<T
::Value
, Error
>
719 T
: DeserializeSeed
<'de
>,
721 match self.value
.take() {
722 Some(value
) => seed
.deserialize(value
),
723 None
=> Err(serde
::de
::Error
::custom("value is missing")),
727 fn size_hint(&self) -> Option
<usize> {
728 match self.iter
.size_hint() {
729 (lower
, Some(upper
)) if lower
== upper
=> Some(upper
),
735 impl<'de
> serde
::Deserializer
<'de
> for MapDeserializer
{
739 fn deserialize_any
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Error
>
743 visitor
.visit_map(self)
746 forward_to_deserialize_any
! {
747 bool
i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
748 byte_buf option unit unit_struct newtype_struct seq tuple
749 tuple_struct map
struct enum identifier ignored_any
753 macro_rules
! deserialize_value_ref_number
{
755 #[cfg(not(feature = "arbitrary_precision"))]
756 fn $method
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Error
>
761 Value
::Number(ref n
) => n
.deserialize_any(visitor
),
762 _
=> Err(self.invalid_type(&visitor
)),
766 #[cfg(feature = "arbitrary_precision")]
767 fn $method
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Error
>
772 Value
::Number(ref n
) => n
.$
method(visitor
),
773 _
=> self.deserialize_any(visitor
),
779 fn visit_array_ref
<'de
, V
>(array
: &'de
[Value
], visitor
: V
) -> Result
<V
::Value
, Error
>
783 let len
= array
.len();
784 let mut deserializer
= SeqRefDeserializer
::new(array
);
785 let seq
= try
!(visitor
.visit_seq(&mut deserializer
));
786 let remaining
= deserializer
.iter
.len();
790 Err(serde
::de
::Error
::invalid_length(
792 &"fewer elements in array",
797 fn visit_object_ref
<'de
, V
>(object
: &'de Map
<String
, Value
>, visitor
: V
) -> Result
<V
::Value
, Error
>
801 let len
= object
.len();
802 let mut deserializer
= MapRefDeserializer
::new(object
);
803 let map
= try
!(visitor
.visit_map(&mut deserializer
));
804 let remaining
= deserializer
.iter
.len();
808 Err(serde
::de
::Error
::invalid_length(
810 &"fewer elements in map",
815 impl<'de
> serde
::Deserializer
<'de
> for &'de Value
{
818 fn deserialize_any
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Error
>
823 Value
::Null
=> visitor
.visit_unit(),
824 Value
::Bool(v
) => visitor
.visit_bool(v
),
825 Value
::Number(ref n
) => n
.deserialize_any(visitor
),
826 Value
::String(ref v
) => visitor
.visit_borrowed_str(v
),
827 Value
::Array(ref v
) => visit_array_ref(v
, visitor
),
828 Value
::Object(ref v
) => visit_object_ref(v
, visitor
),
832 deserialize_value_ref_number
!(deserialize_i8
);
833 deserialize_value_ref_number
!(deserialize_i16
);
834 deserialize_value_ref_number
!(deserialize_i32
);
835 deserialize_value_ref_number
!(deserialize_i64
);
836 deserialize_value_ref_number
!(deserialize_u8
);
837 deserialize_value_ref_number
!(deserialize_u16
);
838 deserialize_value_ref_number
!(deserialize_u32
);
839 deserialize_value_ref_number
!(deserialize_u64
);
840 deserialize_value_ref_number
!(deserialize_f32
);
841 deserialize_value_ref_number
!(deserialize_f64
);
843 fn deserialize_option
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Error
>
848 Value
::Null
=> visitor
.visit_none(),
849 _
=> visitor
.visit_some(self),
853 fn deserialize_enum
<V
>(
856 _variants
: &'
static [&'
static str],
858 ) -> Result
<V
::Value
, Error
>
862 let (variant
, value
) = match *self {
863 Value
::Object(ref value
) => {
864 let mut iter
= value
.into_iter();
865 let (variant
, value
) = match iter
.next() {
868 return Err(serde
::de
::Error
::invalid_value(
870 &"map with a single key",
874 // enums are encoded in json as maps with a single key:value pair
875 if iter
.next().is_some() {
876 return Err(serde
::de
::Error
::invalid_value(
878 &"map with a single key",
881 (variant
, Some(value
))
883 Value
::String(ref variant
) => (variant
, None
),
885 return Err(serde
::de
::Error
::invalid_type(
892 visitor
.visit_enum(EnumRefDeserializer
{
899 fn deserialize_newtype_struct
<V
>(
903 ) -> Result
<V
::Value
, Self::Error
>
907 visitor
.visit_newtype_struct(self)
910 fn deserialize_bool
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
915 Value
::Bool(v
) => visitor
.visit_bool(v
),
916 _
=> Err(self.invalid_type(&visitor
)),
920 fn deserialize_char
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
924 self.deserialize_str(visitor
)
927 fn deserialize_str
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
932 Value
::String(ref v
) => visitor
.visit_borrowed_str(v
),
933 _
=> Err(self.invalid_type(&visitor
)),
937 fn deserialize_string
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
941 self.deserialize_str(visitor
)
944 fn deserialize_bytes
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
949 Value
::String(ref v
) => visitor
.visit_borrowed_str(v
),
950 Value
::Array(ref v
) => visit_array_ref(v
, visitor
),
951 _
=> Err(self.invalid_type(&visitor
)),
955 fn deserialize_byte_buf
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
959 self.deserialize_bytes(visitor
)
962 fn deserialize_unit
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
967 Value
::Null
=> visitor
.visit_unit(),
968 _
=> Err(self.invalid_type(&visitor
)),
972 fn deserialize_unit_struct
<V
>(
976 ) -> Result
<V
::Value
, Self::Error
>
980 self.deserialize_unit(visitor
)
983 fn deserialize_seq
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
988 Value
::Array(ref v
) => visit_array_ref(v
, visitor
),
989 _
=> Err(self.invalid_type(&visitor
)),
993 fn deserialize_tuple
<V
>(self, _len
: usize, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
997 self.deserialize_seq(visitor
)
1000 fn deserialize_tuple_struct
<V
>(
1002 _name
: &'
static str,
1005 ) -> Result
<V
::Value
, Self::Error
>
1009 self.deserialize_seq(visitor
)
1012 fn deserialize_map
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
1017 Value
::Object(ref v
) => visit_object_ref(v
, visitor
),
1018 _
=> Err(self.invalid_type(&visitor
)),
1022 fn deserialize_struct
<V
>(
1024 _name
: &'
static str,
1025 _fields
: &'
static [&'
static str],
1027 ) -> Result
<V
::Value
, Self::Error
>
1032 Value
::Array(ref v
) => visit_array_ref(v
, visitor
),
1033 Value
::Object(ref v
) => visit_object_ref(v
, visitor
),
1034 _
=> Err(self.invalid_type(&visitor
)),
1038 fn deserialize_identifier
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
1042 self.deserialize_str(visitor
)
1045 fn deserialize_ignored_any
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Self::Error
>
1049 visitor
.visit_unit()
1053 struct EnumRefDeserializer
<'de
> {
1055 value
: Option
<&'de Value
>,
1058 impl<'de
> EnumAccess
<'de
> for EnumRefDeserializer
<'de
> {
1060 type Variant
= VariantRefDeserializer
<'de
>;
1062 fn variant_seed
<V
>(self, seed
: V
) -> Result
<(V
::Value
, Self::Variant
), Error
>
1064 V
: DeserializeSeed
<'de
>,
1066 let variant
= self.variant
.into_deserializer();
1067 let visitor
= VariantRefDeserializer { value: self.value }
;
1068 seed
.deserialize(variant
).map(|v
| (v
, visitor
))
1072 struct VariantRefDeserializer
<'de
> {
1073 value
: Option
<&'de Value
>,
1076 impl<'de
> VariantAccess
<'de
> for VariantRefDeserializer
<'de
> {
1079 fn unit_variant(self) -> Result
<(), Error
> {
1081 Some(value
) => Deserialize
::deserialize(value
),
1086 fn newtype_variant_seed
<T
>(self, seed
: T
) -> Result
<T
::Value
, Error
>
1088 T
: DeserializeSeed
<'de
>,
1091 Some(value
) => seed
.deserialize(value
),
1092 None
=> Err(serde
::de
::Error
::invalid_type(
1093 Unexpected
::UnitVariant
,
1099 fn tuple_variant
<V
>(self, _len
: usize, visitor
: V
) -> Result
<V
::Value
, Error
>
1104 Some(&Value
::Array(ref v
)) => {
1105 serde
::Deserializer
::deserialize_any(SeqRefDeserializer
::new(v
), visitor
)
1107 Some(other
) => Err(serde
::de
::Error
::invalid_type(
1111 None
=> Err(serde
::de
::Error
::invalid_type(
1112 Unexpected
::UnitVariant
,
1118 fn struct_variant
<V
>(
1120 _fields
: &'
static [&'
static str],
1122 ) -> Result
<V
::Value
, Error
>
1127 Some(&Value
::Object(ref v
)) => {
1128 serde
::Deserializer
::deserialize_any(MapRefDeserializer
::new(v
), visitor
)
1130 Some(other
) => Err(serde
::de
::Error
::invalid_type(
1134 _
=> Err(serde
::de
::Error
::invalid_type(
1135 Unexpected
::UnitVariant
,
1142 struct SeqRefDeserializer
<'de
> {
1143 iter
: slice
::Iter
<'de
, Value
>,
1146 impl<'de
> SeqRefDeserializer
<'de
> {
1147 fn new(slice
: &'de
[Value
]) -> Self {
1148 SeqRefDeserializer { iter: slice.iter() }
1152 impl<'de
> serde
::Deserializer
<'de
> for SeqRefDeserializer
<'de
> {
1156 fn deserialize_any
<V
>(mut self, visitor
: V
) -> Result
<V
::Value
, Error
>
1160 let len
= self.iter
.len();
1162 visitor
.visit_unit()
1164 let ret
= try
!(visitor
.visit_seq(&mut self));
1165 let remaining
= self.iter
.len();
1169 Err(serde
::de
::Error
::invalid_length(
1171 &"fewer elements in array",
1177 forward_to_deserialize_any
! {
1178 bool
i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
1179 byte_buf option unit unit_struct newtype_struct seq tuple
1180 tuple_struct map
struct enum identifier ignored_any
1184 impl<'de
> SeqAccess
<'de
> for SeqRefDeserializer
<'de
> {
1187 fn next_element_seed
<T
>(&mut self, seed
: T
) -> Result
<Option
<T
::Value
>, Error
>
1189 T
: DeserializeSeed
<'de
>,
1191 match self.iter
.next() {
1192 Some(value
) => seed
.deserialize(value
).map(Some
),
1197 fn size_hint(&self) -> Option
<usize> {
1198 match self.iter
.size_hint() {
1199 (lower
, Some(upper
)) if lower
== upper
=> Some(upper
),
1205 struct MapRefDeserializer
<'de
> {
1206 iter
: <&'de Map
<String
, Value
> as IntoIterator
>::IntoIter
,
1207 value
: Option
<&'de Value
>,
1210 impl<'de
> MapRefDeserializer
<'de
> {
1211 fn new(map
: &'de Map
<String
, Value
>) -> Self {
1212 MapRefDeserializer
{
1213 iter
: map
.into_iter(),
1219 impl<'de
> MapAccess
<'de
> for MapRefDeserializer
<'de
> {
1222 fn next_key_seed
<T
>(&mut self, seed
: T
) -> Result
<Option
<T
::Value
>, Error
>
1224 T
: DeserializeSeed
<'de
>,
1226 match self.iter
.next() {
1227 Some((key
, value
)) => {
1228 self.value
= Some(value
);
1229 let key_de
= MapKeyDeserializer
{
1230 key
: Cow
::Borrowed(&**key
),
1232 seed
.deserialize(key_de
).map(Some
)
1238 fn next_value_seed
<T
>(&mut self, seed
: T
) -> Result
<T
::Value
, Error
>
1240 T
: DeserializeSeed
<'de
>,
1242 match self.value
.take() {
1243 Some(value
) => seed
.deserialize(value
),
1244 None
=> Err(serde
::de
::Error
::custom("value is missing")),
1248 fn size_hint(&self) -> Option
<usize> {
1249 match self.iter
.size_hint() {
1250 (lower
, Some(upper
)) if lower
== upper
=> Some(upper
),
1256 impl<'de
> serde
::Deserializer
<'de
> for MapRefDeserializer
<'de
> {
1260 fn deserialize_any
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Error
>
1264 visitor
.visit_map(self)
1267 forward_to_deserialize_any
! {
1268 bool
i8 i16 i32 i64 u8 u16 u32 u64 f32 f64 char str string bytes
1269 byte_buf option unit unit_struct newtype_struct seq tuple
1270 tuple_struct map
struct enum identifier ignored_any
1274 struct MapKeyDeserializer
<'de
> {
1278 macro_rules
! deserialize_integer_key
{
1279 ($method
:ident
=> $visit
:ident
) => {
1280 fn $method
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Error
>
1284 match (self.key
.parse(), self.key
) {
1285 (Ok(integer
), _
) => visitor
.$
visit(integer
),
1286 (Err(_
), Cow
::Borrowed(s
)) => visitor
.visit_borrowed_str(s
),
1287 (Err(_
), Cow
::Owned(s
)) => visitor
.visit_string(s
),
1293 impl<'de
> serde
::Deserializer
<'de
> for MapKeyDeserializer
<'de
> {
1296 fn deserialize_any
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Error
>
1300 self.key
.into_deserializer().deserialize_any(visitor
)
1303 deserialize_integer_key
!(deserialize_i8
=> visit_i8
);
1304 deserialize_integer_key
!(deserialize_i16
=> visit_i16
);
1305 deserialize_integer_key
!(deserialize_i32
=> visit_i32
);
1306 deserialize_integer_key
!(deserialize_i64
=> visit_i64
);
1307 deserialize_integer_key
!(deserialize_u8
=> visit_u8
);
1308 deserialize_integer_key
!(deserialize_u16
=> visit_u16
);
1309 deserialize_integer_key
!(deserialize_u32
=> visit_u32
);
1310 deserialize_integer_key
!(deserialize_u64
=> visit_u64
);
1313 fn deserialize_option
<V
>(self, visitor
: V
) -> Result
<V
::Value
, Error
>
1317 // Map keys cannot be null.
1318 visitor
.visit_some(self)
1322 fn deserialize_newtype_struct
<V
>(
1324 _name
: &'
static str,
1326 ) -> Result
<V
::Value
, Error
>
1330 visitor
.visit_newtype_struct(self)
1333 fn deserialize_enum
<V
>(
1336 variants
: &'
static [&'
static str],
1338 ) -> Result
<V
::Value
, Error
>
1343 .into_deserializer()
1344 .deserialize_enum(name
, variants
, visitor
)
1347 forward_to_deserialize_any
! {
1348 bool
f32 f64 char str string bytes byte_buf unit unit_struct seq tuple
1349 tuple_struct map
struct identifier ignored_any
1353 #[cfg(feature = "arbitrary_precision")]
1354 struct NumberOrObject
<'a
> {
1355 key
: &'a
mut String
,
1358 #[cfg(feature = "arbitrary_precision")]
1359 impl<'a
, 'de
> DeserializeSeed
<'de
> for NumberOrObject
<'a
> {
1362 fn deserialize
<D
>(self, deserializer
: D
) -> Result
<Self::Value
, D
::Error
>
1364 D
: serde
::Deserializer
<'de
>,
1366 deserializer
.deserialize_any(self)
1370 #[cfg(feature = "arbitrary_precision")]
1371 impl<'a
, 'de
> Visitor
<'de
> for NumberOrObject
<'a
> {
1374 fn expecting(&self, formatter
: &mut fmt
::Formatter
) -> fmt
::Result
{
1375 formatter
.write_str("a string key")
1378 fn visit_str
<E
>(self, s
: &str) -> Result
<bool
, E
>
1382 if s
== SERDE_STRUCT_FIELD_NAME
{
1385 self.key
.push_str(s
);
1390 fn visit_string
<E
>(self, s
: String
) -> Result
<bool
, E
>
1394 if s
== SERDE_STRUCT_FIELD_NAME
{
1405 fn invalid_type
<E
>(&self, exp
: &Expected
) -> E
1407 E
: serde
::de
::Error
,
1409 serde
::de
::Error
::invalid_type(self.unexpected(), exp
)
1412 fn unexpected(&self) -> Unexpected
{
1414 Value
::Null
=> Unexpected
::Unit
,
1415 Value
::Bool(b
) => Unexpected
::Bool(b
),
1416 Value
::Number(ref n
) => n
.unexpected(),
1417 Value
::String(ref s
) => Unexpected
::Str(s
),
1418 Value
::Array(_
) => Unexpected
::Seq
,
1419 Value
::Object(_
) => Unexpected
::Map
,