diff --git a/serde2/src/de2.rs b/serde2/src/de2.rs index c0a7f667..77607897 100644 --- a/serde2/src/de2.rs +++ b/serde2/src/de2.rs @@ -19,12 +19,12 @@ trait DeserializerState<E> { fn syntax_error(&mut self) -> E; fn visit< - V: Visitor<T, Self, E>, + V: VisitorState<T, Self, E>, T: Deserialize<Self, E>, >(&mut self, visitor: &mut V) -> Result<T, E>; } -trait Visitor< +trait VisitorState< T, D: DeserializerState<E>, E, @@ -77,7 +77,6 @@ trait MapVisitor<D, E> { } } - /////////////////////////////////////////////////////////////////////////////// impl< @@ -90,7 +89,7 @@ impl< impl< D: DeserializerState<E>, E, - > ::Visitor<int, D, E> for Visitor { + > ::VisitorState<int, D, E> for Visitor { fn visit_int(&mut self, _d: &mut D, v: int) -> Result<int, E> { Ok(v) } @@ -110,7 +109,7 @@ impl< impl< D: DeserializerState<E>, E, - > ::Visitor<String, D, E> for Visitor { + > ::VisitorState<String, D, E> for Visitor { fn visit_string(&mut self, _d: &mut D, v: String) -> Result<String, E> { Ok(v) } @@ -134,9 +133,9 @@ impl< T: Deserialize<D, E>, D: DeserializerState<E>, E, - > ::Visitor<Vec<T>, D, E> for Visitor { + > ::VisitorState<Vec<T>, D, E> for Visitor { fn visit_seq< - Visitor: SeqVisitor<D, E>, + Visitor: ::SeqVisitor<D, E>, >(&mut self, d: &mut D, mut visitor: Visitor) -> Result<Vec<T>, E> { let (len, _) = visitor.size_hint(); let mut values = Vec::with_capacity(len); @@ -175,7 +174,7 @@ impl< impl< D: DeserializerState<E>, E, - > ::Visitor<(), D, E> for Visitor { + > ::VisitorState<(), D, E> for Visitor { fn visit_null(&mut self, _d: &mut D) -> Result<(), E> { Ok(()) } @@ -201,9 +200,9 @@ impl< T1: Deserialize<D, E>, D: DeserializerState<E>, E - > ::Visitor<(T0, T1), D, E> for Visitor { + > ::VisitorState<(T0, T1), D, E> for Visitor { fn visit_seq< - Visitor: SeqVisitor<D, E>, + Visitor: ::SeqVisitor<D, E>, >(&mut self, d: &mut D, mut visitor: Visitor) -> Result<(T0, T1), E> { let mut state = 0u; let mut t0 = None; @@ -264,15 +263,16 @@ impl< V: Deserialize<D, E>, D: DeserializerState<E>, E, - > ::Visitor<HashMap<K, V>, D, E> for Visitor { + > ::VisitorState<HashMap<K, V>, D, E> for Visitor { fn visit_map< - Visitor: MapVisitor<D, E>, + Visitor: ::MapVisitor<D, E>, >(&mut self, d: &mut D, mut visitor: Visitor) -> Result<HashMap<K, V>, E> { let (len, _) = visitor.size_hint(); let mut values = HashMap::with_capacity(len); loop { - match visitor.next(d) { + let kv: Option<Result<(K, V), E>> = visitor.next(d); + match kv { Some(Ok((key, value))) => { values.insert(key, value); } @@ -307,14 +307,15 @@ impl< V: Deserialize<D, E>, D: DeserializerState<E>, E, - > ::Visitor<TreeMap<K, V>, D, E> for Visitor { + > ::VisitorState<TreeMap<K, V>, D, E> for Visitor { fn visit_map< - Visitor: MapVisitor<D, E>, + Visitor: ::MapVisitor<D, E>, >(&mut self, d: &mut D, mut visitor: Visitor) -> Result<TreeMap<K, V>, E> { let mut values = TreeMap::new(); loop { - match visitor.next(d) { + let kv: Option<Result<(K, V), E>> = visitor.next(d); + match kv { Some(Ok((key, value))) => { values.insert(key, value); } @@ -360,7 +361,7 @@ mod json { impl< D: super::DeserializerState<E>, E, - > super::Visitor<Value, D, E> for Visitor { + > super::VisitorState<Value, D, E> for Visitor { fn visit_null(&mut self, _d: &mut D) -> Result<Value, E> { Ok(Null) } @@ -402,7 +403,8 @@ mod json { let mut values = TreeMap::new(); loop { - match visitor.next(d) { + let kv: Option<Result<(String, Value), E>> = visitor.next(d); + match kv { Some(Ok((key, value))) => { values.insert(key, value); } @@ -479,7 +481,7 @@ impl< } fn visit< - V: Visitor<T, MyDeserializer<Iter>, ()>, + V: VisitorState<T, MyDeserializer<Iter>, ()>, T: Deserialize<MyDeserializer<Iter>, ()>, >(&mut self, visitor: &mut V) -> Result<T, ()> { match self.next() {