Compiles and fixes internally tagged testcases.

This commit is contained in:
Michael Mokrysz
2017-02-23 01:05:44 +00:00
parent 8f6e1fb5b3
commit 4c253748c2
+6 -8
View File
@@ -22,7 +22,6 @@ use alloc::boxed::Box;
use de::{self, Deserialize, DeserializeSeed, Deserializer, Visitor, SeqVisitor, MapVisitor, use de::{self, Deserialize, DeserializeSeed, Deserializer, Visitor, SeqVisitor, MapVisitor,
EnumVisitor, Unexpected}; EnumVisitor, Unexpected};
use de::value::ValueDeserializer;
/// Used from generated code to buffer the contents of the Deserializer when /// Used from generated code to buffer the contents of the Deserializer when
/// deserializing untagged enums and internally tagged enums. /// deserializing untagged enums and internally tagged enums.
@@ -685,7 +684,7 @@ impl<E> ContentDeserializer<E> {
} }
struct EnumDeserializer<E> where E: de::Error { struct EnumDeserializer<E> where E: de::Error {
variant: String, variant: Content,
value: Option<Content>, value: Option<Content>,
err: PhantomData<E>, err: PhantomData<E>,
} }
@@ -695,11 +694,10 @@ impl<E> de::EnumVisitor for EnumDeserializer<E> where E: de::Error {
type Variant = VariantDeserializer<Self::Error>; type Variant = VariantDeserializer<Self::Error>;
fn visit_variant_seed<V>(self, seed: V) -> Result<(V::Value, VariantDeserializer<E>), Self::Error> fn visit_variant_seed<V>(self, seed: V) -> Result<(V::Value, VariantDeserializer<E>), Self::Error>
where V: de::DeserializeSeed where V: de::DeserializeSeed,
{ {
let variant = self.variant.into_deserializer();
let visitor = VariantDeserializer { value: self.value, err: PhantomData, }; let visitor = VariantDeserializer { value: self.value, err: PhantomData, };
seed.deserialize(variant).map(|v| (v, visitor)) seed.deserialize(ContentDeserializer::new(self.variant)).map(|v| (v, visitor))
} }
} }
@@ -820,13 +818,13 @@ impl<E> de::SeqVisitor for SeqDeserializer<E> where E: de::Error {
} }
struct MapDeserializer<E> where E: de::Error { struct MapDeserializer<E> where E: de::Error {
iter: <Vec<(String, Content)> as IntoIterator>::IntoIter, iter: <Vec<(Content, Content)> as IntoIterator>::IntoIter,
value: Option<Content>, value: Option<Content>,
err: PhantomData<E>, err: PhantomData<E>,
} }
impl<E> MapDeserializer<E> where E: de::Error { impl<E> MapDeserializer<E> where E: de::Error {
fn new(map: Vec<(String, Content)>) -> Self { fn new(map: Vec<(Content, Content)>) -> Self {
MapDeserializer { MapDeserializer {
iter: map.into_iter(), iter: map.into_iter(),
value: None, value: None,
@@ -844,7 +842,7 @@ impl<E> de::MapVisitor for MapDeserializer<E> where E: de::Error {
match self.iter.next() { match self.iter.next() {
Some((key, value)) => { Some((key, value)) => {
self.value = Some(value); self.value = Some(value);
seed.deserialize(ContentDeserializer::new(Content::String(key))).map(Some) seed.deserialize(ContentDeserializer::new(key)).map(Some)
} }
None => Ok(None), None => Ok(None),
} }