Fix tests, make Deserializer::visit take a value not a reference

This commit is contained in:
Erick Tryzelaar
2015-03-03 09:50:57 -08:00
parent 9904d32ff9
commit 1182ad0223
6 changed files with 51 additions and 48 deletions
+6 -6
View File
@@ -68,7 +68,7 @@ impl de::Deserialize for HttpProtocol {
fn deserialize< fn deserialize<
S: Deserializer, S: Deserializer,
>(state: &mut S) -> Result<HttpProtocol, S::Error> { >(state: &mut S) -> Result<HttpProtocol, S::Error> {
state.visit(&mut de::PrimitiveVisitor::new()) state.visit(de::PrimitiveVisitor::new())
} }
} }
@@ -116,7 +116,7 @@ impl de::Deserialize for HttpMethod {
fn deserialize< fn deserialize<
S: de::Deserializer, S: de::Deserializer,
>(state: &mut S) -> Result<HttpMethod, S::Error> { >(state: &mut S) -> Result<HttpMethod, S::Error> {
state.visit(&mut de::PrimitiveVisitor::new()) state.visit(de::PrimitiveVisitor::new())
} }
} }
@@ -157,7 +157,7 @@ impl de::Deserialize for CacheStatus {
fn deserialize< fn deserialize<
S: de::Deserializer, S: de::Deserializer,
>(state: &mut S) -> Result<CacheStatus, S::Error> { >(state: &mut S) -> Result<CacheStatus, S::Error> {
state.visit(&mut de::PrimitiveVisitor::new()) state.visit(de::PrimitiveVisitor::new())
} }
} }
@@ -207,7 +207,7 @@ impl de::Deserialize for OriginProtocol {
fn deserialize< fn deserialize<
S: de::Deserializer, S: de::Deserializer,
>(state: &mut S) -> Result<OriginProtocol, S::Error> { >(state: &mut S) -> Result<OriginProtocol, S::Error> {
state.visit(&mut de::PrimitiveVisitor::new()) state.visit(de::PrimitiveVisitor::new())
} }
} }
@@ -249,7 +249,7 @@ impl de::Deserialize for ZonePlan {
fn deserialize< fn deserialize<
S: de::Deserializer, S: de::Deserializer,
>(state: &mut S) -> Result<ZonePlan, S::Error> { >(state: &mut S) -> Result<ZonePlan, S::Error> {
state.visit(&mut de::PrimitiveVisitor::new()) state.visit(de::PrimitiveVisitor::new())
} }
} }
@@ -542,7 +542,7 @@ impl de::Deserialize for Country {
fn deserialize< fn deserialize<
S: de::Deserializer, S: de::Deserializer,
>(state: &mut S) -> Result<Country, S::Error> { >(state: &mut S) -> Result<Country, S::Error> {
state.visit(&mut de::PrimitiveVisitor::new()) state.visit(de::PrimitiveVisitor::new())
} }
} }
+10 -10
View File
@@ -585,13 +585,13 @@ pub fn expand_derive_deserialize(
generics: LifetimeBounds { generics: LifetimeBounds {
lifetimes: Vec::new(), lifetimes: Vec::new(),
bounds: vec![ bounds: vec![
("__S", vec![Path::new(vec!["serde2", "de", "Deserializer"])]), ("__D", vec![Path::new(vec!["serde2", "de", "Deserializer"])]),
], ],
}, },
explicit_self: None, explicit_self: None,
args: vec![ args: vec![
Ty::Ptr( Ty::Ptr(
Box::new(Ty::Literal(Path::new_local("__S"))), Box::new(Ty::Literal(Path::new_local("__D"))),
Borrowed(None, MutMutable) Borrowed(None, MutMutable)
), ),
], ],
@@ -601,7 +601,7 @@ pub fn expand_derive_deserialize(
None, None,
vec![ vec![
Box::new(Ty::Self_), Box::new(Ty::Self_),
Box::new(Ty::Literal(Path::new_(vec!["__S", "Error"], Box::new(Ty::Literal(Path::new_(vec!["__D", "Error"],
None, None,
vec![], vec![],
false))), false))),
@@ -729,7 +729,7 @@ fn deserialize_struct_empty_fields(
} }
} }
$state.visit(&mut __Visitor) $state.visit(__Visitor)
}) })
} }
@@ -778,7 +778,7 @@ fn deserialize_struct_unnamed_fields(
} }
} }
$state.visit(&mut __Visitor) $state.visit(__Visitor)
}) })
} }
@@ -876,7 +876,7 @@ fn deserialize_struct_named_fields(
} }
} }
$state.visit(&mut __Visitor) $state.visit(__Visitor)
}) })
} }
@@ -986,7 +986,7 @@ fn declare_map_field_deserializer(
fn deserialize< fn deserialize<
__S: ::serde2::de::Deserializer, __S: ::serde2::de::Deserializer,
>(state: &mut __S) -> Result<__Field, __S::Error> { >(state: &mut __S) -> Result<__Field, __S::Error> {
state.visit(&mut __FieldVisitor) state.visit(__FieldVisitor)
} }
} }
).unwrap(), ).unwrap(),
@@ -1143,7 +1143,7 @@ fn deserialize_enum(
} }
} }
$state.visit(&mut __Visitor) $state.visit(__Visitor)
}) })
} }
@@ -1193,7 +1193,7 @@ fn deserialize_enum_variant(
} }
} }
$state.visit_seq(&mut __Visitor) $state.visit_seq(__Visitor)
}) })
} }
} }
@@ -1241,7 +1241,7 @@ fn deserialize_enum_variant(
} }
} }
$state.visit_map(&mut __Visitor) $state.visit_map(__Visitor)
}) })
} }
} }
+27 -26
View File
@@ -25,7 +25,7 @@ pub trait Deserializer {
fn visit< fn visit<
V: Visitor, V: Visitor,
>(&mut self, visitor: &mut V) -> Result<V::Value, Self::Error>; >(&mut self, visitor: V) -> Result<V::Value, Self::Error>;
/// The `visit_option` method allows a `Deserialize` type to inform the /// The `visit_option` method allows a `Deserialize` type to inform the
/// `Deserializer` that it's expecting an optional value. This allows /// `Deserializer` that it's expecting an optional value. This allows
@@ -35,7 +35,7 @@ pub trait Deserializer {
#[inline] #[inline]
fn visit_option< fn visit_option<
V: Visitor, V: Visitor,
>(&mut self, visitor: &mut V) -> Result<V::Value, Self::Error> { >(&mut self, visitor: V) -> Result<V::Value, Self::Error> {
self.visit(visitor) self.visit(visitor)
} }
} }
@@ -264,13 +264,13 @@ pub trait EnumVisitor {
fn visit_seq< fn visit_seq<
V: EnumSeqVisitor, V: EnumSeqVisitor,
>(&mut self, _visitor: &mut V) -> Result<V::Value, Self::Error> { >(&mut self, _visitor: V) -> Result<V::Value, Self::Error> {
Err(Error::syntax_error()) Err(Error::syntax_error())
} }
fn visit_map< fn visit_map<
V: EnumMapVisitor, V: EnumMapVisitor,
>(&mut self, _visitor: &mut V) -> Result<V::Value, Self::Error> { >(&mut self, _visitor: V) -> Result<V::Value, Self::Error> {
Err(Error::syntax_error()) Err(Error::syntax_error())
} }
} }
@@ -315,7 +315,7 @@ impl Deserialize for () {
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<(), D::Error> { >(deserializer: &mut D) -> Result<(), D::Error> {
deserializer.visit(&mut UnitVisitor) deserializer.visit(UnitVisitor)
} }
} }
@@ -337,7 +337,7 @@ impl Deserialize for bool {
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<bool, D::Error> { >(deserializer: &mut D) -> Result<bool, D::Error> {
deserializer.visit(&mut BoolVisitor) deserializer.visit(BoolVisitor)
} }
} }
@@ -396,7 +396,7 @@ macro_rules! impl_deserialize_num {
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<$ty, D::Error> { >(deserializer: &mut D) -> Result<$ty, D::Error> {
deserializer.visit(&mut PrimitiveVisitor::new()) deserializer.visit(PrimitiveVisitor::new())
} }
} }
} }
@@ -451,7 +451,7 @@ impl Deserialize for char {
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<char, D::Error> { >(deserializer: &mut D) -> Result<char, D::Error> {
deserializer.visit(&mut CharVisitor) deserializer.visit(CharVisitor)
} }
} }
@@ -479,7 +479,7 @@ impl Deserialize for String {
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<String, D::Error> { >(deserializer: &mut D) -> Result<String, D::Error> {
deserializer.visit(&mut StringVisitor) deserializer.visit(StringVisitor)
} }
} }
@@ -513,7 +513,7 @@ impl<T> Deserialize for Option<T> where T: Deserialize {
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<Option<T>, D::Error> { >(deserializer: &mut D) -> Result<Option<T>, D::Error> {
deserializer.visit_option(&mut OptionVisitor { marker: PhantomData }) deserializer.visit_option(OptionVisitor { marker: PhantomData })
} }
} }
@@ -526,6 +526,7 @@ struct VecVisitor<T> {
impl<T> Visitor for VecVisitor<T> where T: Deserialize { impl<T> Visitor for VecVisitor<T> where T: Deserialize {
type Value = Vec<T>; type Value = Vec<T>;
#[inline]
fn visit_seq< fn visit_seq<
V: SeqVisitor, V: SeqVisitor,
>(&mut self, mut visitor: V) -> Result<Vec<T>, V::Error> { >(&mut self, mut visitor: V) -> Result<Vec<T>, V::Error> {
@@ -544,7 +545,7 @@ impl<T: Deserialize> Deserialize for Vec<T> {
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<Vec<T>, D::Error> { >(deserializer: &mut D) -> Result<Vec<T>, D::Error> {
deserializer.visit(&mut VecVisitor { marker: PhantomData }) deserializer.visit(VecVisitor { marker: PhantomData })
} }
} }
@@ -588,7 +589,7 @@ macro_rules! tuple_impls {
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<($($name,)+), D::Error> { >(deserializer: &mut D) -> Result<($($name,)+), D::Error> {
deserializer.visit(&mut $visitor { marker: PhantomData }) deserializer.visit($visitor { marker: PhantomData })
} }
} }
)+ )+
@@ -644,7 +645,7 @@ impl<K, V> Deserialize for HashMap<K, V>
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<HashMap<K, V>, D::Error> { >(deserializer: &mut D) -> Result<HashMap<K, V>, D::Error> {
deserializer.visit(&mut HashMapVisitor { marker: PhantomData }) deserializer.visit(HashMapVisitor { marker: PhantomData })
} }
} }
@@ -681,7 +682,7 @@ impl<
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<BTreeMap<K, V>, D::Error> { >(deserializer: &mut D) -> Result<BTreeMap<K, V>, D::Error> {
deserializer.visit(&mut BTreeMapVisitor { marker: PhantomData }) deserializer.visit(BTreeMapVisitor { marker: PhantomData })
} }
} }
@@ -764,7 +765,7 @@ mod tests {
fn visit< fn visit<
V: Visitor, V: Visitor,
>(&mut self, visitor: &mut V) -> Result<V::Value, Error> { >(&mut self, mut visitor: V) -> Result<V::Value, Error> {
match self.tokens.next() { match self.tokens.next() {
Some(Token::Bool(v)) => visitor.visit_bool(v), Some(Token::Bool(v)) => visitor.visit_bool(v),
Some(Token::Isize(v)) => visitor.visit_isize(v), Some(Token::Isize(v)) => visitor.visit_isize(v),
@@ -829,7 +830,7 @@ mod tests {
#[inline] #[inline]
fn visit_option< fn visit_option<
V: Visitor, V: Visitor,
>(&mut self, visitor: &mut V) -> Result<V::Value, Error> { >(&mut self, mut visitor: V) -> Result<V::Value, Error> {
match self.tokens.peek() { match self.tokens.peek() {
Some(&Token::Option(false)) => { Some(&Token::Option(false)) => {
self.tokens.next(); self.tokens.next();
@@ -959,7 +960,7 @@ mod tests {
fn visit_seq< fn visit_seq<
V: super::EnumSeqVisitor, V: super::EnumSeqVisitor,
>(&mut self, visitor: &mut V) -> Result<V::Value, Error> { >(&mut self, mut visitor: V) -> Result<V::Value, Error> {
let token = self.de.tokens.next(); let token = self.de.tokens.next();
match token { match token {
Some(Token::SeqStart(len)) => { Some(Token::SeqStart(len)) => {
@@ -982,7 +983,7 @@ mod tests {
fn visit_map< fn visit_map<
V: super::EnumMapVisitor, V: super::EnumMapVisitor,
>(&mut self, visitor: &mut V) -> Result<V::Value, Error> { >(&mut self, mut visitor: V) -> Result<V::Value, Error> {
match self.de.tokens.next() { match self.de.tokens.next() {
Some(Token::MapStart(len)) => { Some(Token::MapStart(len)) => {
let value = try!(visitor.visit(TokenDeserializerMapVisitor { let value = try!(visitor.visit(TokenDeserializerMapVisitor {
@@ -1012,7 +1013,7 @@ mod tests {
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<NamedUnit, D::Error> { >(deserializer: &mut D) -> Result<NamedUnit, D::Error> {
deserializer.visit(&mut NamedUnitVisitor) deserializer.visit(NamedUnitVisitor)
} }
} }
@@ -1054,7 +1055,7 @@ mod tests {
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<NamedSeq, D::Error> { >(deserializer: &mut D) -> Result<NamedSeq, D::Error> {
deserializer.visit(&mut NamedSeqVisitor) deserializer.visit(NamedSeqVisitor)
} }
} }
@@ -1110,7 +1111,7 @@ mod tests {
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<NamedMap, D::Error> { >(deserializer: &mut D) -> Result<NamedMap, D::Error> {
deserializer.visit(&mut NamedMapVisitor) deserializer.visit(NamedMapVisitor)
} }
} }
@@ -1161,7 +1162,7 @@ mod tests {
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<NamedMapField, D::Error> { >(deserializer: &mut D) -> Result<NamedMapField, D::Error> {
deserializer.visit(&mut NamedMapFieldVisitor) deserializer.visit(NamedMapFieldVisitor)
} }
} }
@@ -1195,7 +1196,7 @@ mod tests {
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<Enum, D::Error> { >(deserializer: &mut D) -> Result<Enum, D::Error> {
deserializer.visit(&mut EnumVisitor) deserializer.visit(EnumVisitor)
} }
} }
@@ -1222,8 +1223,8 @@ mod tests {
try!(visitor.visit_unit()); try!(visitor.visit_unit());
Ok(Enum::Unit) Ok(Enum::Unit)
} }
"Seq" => visitor.visit_seq(&mut EnumSeqVisitor), "Seq" => visitor.visit_seq(EnumSeqVisitor),
"Map" => visitor.visit_map(&mut EnumMapVisitor), "Map" => visitor.visit_map(EnumMapVisitor),
_ => Err(super::Error::syntax_error()), _ => Err(super::Error::syntax_error()),
} }
} }
@@ -1295,7 +1296,7 @@ mod tests {
fn deserialize< fn deserialize<
D: Deserializer, D: Deserializer,
>(deserializer: &mut D) -> Result<EnumMapField, D::Error> { >(deserializer: &mut D) -> Result<EnumMapField, D::Error> {
deserializer.visit(&mut EnumMapFieldVisitor) deserializer.visit(EnumMapFieldVisitor)
} }
} }
+3 -3
View File
@@ -83,7 +83,7 @@ impl<Iter: Iterator<Item=u8>> Deserializer<Iter> {
#[inline] #[inline]
fn parse_value< fn parse_value<
V: de::Visitor, V: de::Visitor,
>(&mut self, visitor: &mut V) -> Result<V::Value, Error> { >(&mut self, mut visitor: V) -> Result<V::Value, Error> {
self.parse_whitespace(); self.parse_whitespace();
if self.eof() { if self.eof() {
@@ -142,7 +142,7 @@ impl<Iter: Iterator<Item=u8>> Deserializer<Iter> {
#[inline] #[inline]
fn parse_number< fn parse_number<
V: de::Visitor, V: de::Visitor,
>(&mut self, visitor: &mut V) -> Result<V::Value, Error> { >(&mut self, mut visitor: V) -> Result<V::Value, Error> {
let mut neg = 1; let mut neg = 1;
if self.ch_is(b'-') { if self.ch_is(b'-') {
@@ -389,7 +389,7 @@ impl<Iter: Iterator<Item=u8>> de::Deserializer for Deserializer<Iter> {
#[inline] #[inline]
fn visit< fn visit<
V: de::Visitor, V: de::Visitor,
>(&mut self, visitor: &mut V) -> Result<V::Value, Error> { >(&mut self, visitor: V) -> Result<V::Value, Error> {
self.parse_value(visitor) self.parse_value(visitor)
} }
} }
+2 -2
View File
@@ -267,7 +267,7 @@ impl de::Deserializer for Deserializer {
#[inline] #[inline]
fn visit< fn visit<
V: de::Visitor, V: de::Visitor,
>(&mut self, visitor: &mut V) -> Result<V::Value, Error> { >(&mut self, mut visitor: V) -> Result<V::Value, Error> {
let value = match self.value.take() { let value = match self.value.take() {
Some(value) => value, Some(value) => value,
None => { return Err(de::Error::end_of_stream_error()); } None => { return Err(de::Error::end_of_stream_error()); }
@@ -302,7 +302,7 @@ impl de::Deserializer for Deserializer {
#[inline] #[inline]
fn visit_option< fn visit_option<
V: de::Visitor, V: de::Visitor,
>(&mut self, visitor: &mut V) -> Result<V::Value, Error> { >(&mut self, mut visitor: V) -> Result<V::Value, Error> {
match self.value { match self.value {
Some(Value::Null) => visitor.visit_none(), Some(Value::Null) => visitor.visit_none(),
Some(_) => visitor.visit_some(self), Some(_) => visitor.visit_some(self),
+3 -1
View File
@@ -31,4 +31,6 @@ enum Enum<'a, A: 'a, B: /* Trait + */ 'a, C> where C: /* Trait + */ 'a {
}, },
} }
fn main() {} #[test]
fn test() {
}