From ecc19bdbdb954d92d8cce50e862c18aaae10ebe8 Mon Sep 17 00:00:00 2001
From: Erick Tryzelaar <erick.tryzelaar@gmail.com>
Date: Tue, 3 Mar 2015 19:34:16 -0800
Subject: [PATCH] Convert over to where clauses

---
 serde2/serde2_macros/src/lib.rs |  17 +-
 serde2/src/de.rs                | 407 ++++++++++++++++----------------
 serde2/src/json/de.rs           |  36 +--
 serde2/src/json/ser.rs          |   6 +-
 serde2/src/json/value.rs        |  30 +--
 serde2/src/ser.rs               | 190 ++++++++-------
 6 files changed, 343 insertions(+), 343 deletions(-)

diff --git a/serde2/serde2_macros/src/lib.rs b/serde2/serde2_macros/src/lib.rs
index 280a719f..43dfea8d 100644
--- a/serde2/serde2_macros/src/lib.rs
+++ b/serde2/serde2_macros/src/lib.rs
@@ -1123,9 +1123,12 @@ fn deserialize_enum(
         impl ::serde2::de::Visitor for __Visitor {
             type Value = $type_ident;
 
-            fn visit_enum<
-                __V: ::serde2::de::EnumVisitor,
-            >(&mut self, name: &str, variant: &str, mut visitor: __V) -> Result<$type_ident, __V::Error> {
+            fn visit_enum<__V>(&mut self,
+                               name: &str,
+                               variant: &str,
+                               mut visitor: __V) -> Result<$type_ident, __V::Error>
+                where __V: ::serde2::de::EnumVisitor,
+            {
                 if name == $type_name {
                     self.visit_variant(variant, visitor)
                 } else {
@@ -1133,9 +1136,11 @@ fn deserialize_enum(
                 }
             }
 
-            fn visit_variant<
-                __V: ::serde2::de::EnumVisitor,
-            >(&mut self, name: &str, mut visitor: __V) -> Result<$type_ident, __V::Error> {
+            fn visit_variant<__V>(&mut self,
+                                  name: &str,
+                                  mut visitor: __V) -> Result<$type_ident, __V::Error>
+                where __V: ::serde2::de::EnumVisitor
+            {
                 match name {
                     $variant_arms
                     _ => Err(::serde2::de::Error::syntax_error()),
diff --git a/serde2/src/de.rs b/serde2/src/de.rs
index 5a6a8749..b0d26389 100644
--- a/serde2/src/de.rs
+++ b/serde2/src/de.rs
@@ -15,17 +15,15 @@ pub trait Error {
 }
 
 pub trait Deserialize {
-    fn deserialize<
-        D: Deserializer,
-    >(deserializer: &mut D) -> Result<Self, D::Error>;
+    fn deserialize<D>(deserializer: &mut D) -> Result<Self, D::Error>
+        where D: Deserializer;
 }
 
 pub trait Deserializer {
     type Error: Error;
 
-    fn visit<
-        V: Visitor,
-    >(&mut self, visitor: V) -> Result<V::Value, Self::Error>;
+    fn visit<V>(&mut self, visitor: V) -> Result<V::Value, Self::Error>
+        where V: Visitor;
 
     /// The `visit_option` method allows a `Deserialize` type to inform the
     /// `Deserializer` that it's expecting an optional value. This allows
@@ -33,9 +31,9 @@ pub trait Deserializer {
     /// convert the null value into a `None`, and a regular value as
     /// `Some(value)`.
     #[inline]
-    fn visit_option<
-        V: Visitor,
-    >(&mut self, visitor: V) -> Result<V::Value, Self::Error> {
+    fn visit_option<V>(&mut self, visitor: V) -> Result<V::Value, Self::Error>
+        where V: Visitor,
+    {
         self.visit(visitor)
     }
 }
@@ -43,169 +41,172 @@ pub trait Deserializer {
 pub trait Visitor {
     type Value;
 
-    fn visit_bool<
-        E: Error,
-    >(&mut self, _v: bool) -> Result<Self::Value, E> {
+    fn visit_bool<E>(&mut self, _v: bool) -> Result<Self::Value, E>
+        where E: Error,
+    {
         Err(Error::syntax_error())
     }
 
-    fn visit_isize<
-        E: Error,
-    >(&mut self, v: isize) -> Result<Self::Value, E> {
+    fn visit_isize<E>(&mut self, v: isize) -> Result<Self::Value, E>
+        where E: Error,
+    {
         self.visit_i64(v as i64)
     }
 
-    fn visit_i8<
-        E: Error,
-    >(&mut self, v: i8) -> Result<Self::Value, E> {
+    fn visit_i8<E>(&mut self, v: i8) -> Result<Self::Value, E>
+        where E: Error,
+    {
         self.visit_i64(v as i64)
     }
 
-    fn visit_i16<
-        E: Error,
-    >(&mut self, v: i16) -> Result<Self::Value, E> {
+    fn visit_i16<E>(&mut self, v: i16) -> Result<Self::Value, E>
+        where E: Error,
+    {
         self.visit_i64(v as i64)
     }
 
-    fn visit_i32<
-        E: Error,
-    >(&mut self, v: i32) -> Result<Self::Value, E> {
+    fn visit_i32<E>(&mut self, v: i32) -> Result<Self::Value, E>
+        where E: Error,
+    {
         self.visit_i64(v as i64)
     }
 
-    fn visit_i64<
-        E: Error,
-    >(&mut self, _v: i64) -> Result<Self::Value, E> {
+    fn visit_i64<E>(&mut self, _v: i64) -> Result<Self::Value, E>
+        where E: Error,
+    {
         Err(Error::syntax_error())
     }
 
-    fn visit_usize<
-        E: Error,
-    >(&mut self, v: usize) -> Result<Self::Value, E> {
+    fn visit_usize<E>(&mut self, v: usize) -> Result<Self::Value, E>
+        where E: Error,
+    {
         self.visit_u64(v as u64)
     }
 
-    fn visit_u8<
-        E: Error,
-    >(&mut self, v: u8) -> Result<Self::Value, E> {
+    fn visit_u8<E>(&mut self, v: u8) -> Result<Self::Value, E>
+        where E: Error,
+    {
         self.visit_u64(v as u64)
     }
 
-    fn visit_u16<
-        E: Error,
-    >(&mut self, v: u16) -> Result<Self::Value, E> {
+    fn visit_u16<E>(&mut self, v: u16) -> Result<Self::Value, E>
+        where E: Error,
+    {
         self.visit_u64(v as u64)
     }
 
-    fn visit_u32<
-        E: Error,
-    >(&mut self, v: u32) -> Result<Self::Value, E> {
+    fn visit_u32<E>(&mut self, v: u32) -> Result<Self::Value, E>
+        where E: Error,
+    {
         self.visit_u64(v as u64)
     }
 
-    fn visit_u64<
-        E: Error,
-    >(&mut self, _v: u64) -> Result<Self::Value, E> {
+    fn visit_u64<E>(&mut self, _v: u64) -> Result<Self::Value, E>
+        where E: Error,
+    {
         Err(Error::syntax_error())
     }
 
-    fn visit_f32<
-        E: Error,
-    >(&mut self, v: f32) -> Result<Self::Value, E> {
+    fn visit_f32<E>(&mut self, v: f32) -> Result<Self::Value, E>
+        where E: Error,
+    {
         self.visit_f64(v as f64)
     }
 
-    fn visit_f64<
-        E: Error,
-    >(&mut self, _v: f64) -> Result<Self::Value, E> {
+    fn visit_f64<E>(&mut self, _v: f64) -> Result<Self::Value, E>
+        where E: Error,
+    {
         Err(Error::syntax_error())
     }
 
     #[inline]
-    fn visit_char<
-        E: Error,
-    >(&mut self, v: char) -> Result<Self::Value, E> {
+    fn visit_char<E>(&mut self, v: char) -> Result<Self::Value, E>
+        where E: Error,
+    {
         // The unwraps in here should be safe.
         let mut s = &mut [0; 4];
         let len = v.encode_utf8(s).unwrap();
         self.visit_str(str::from_utf8(&s[..len]).unwrap())
     }
 
-    fn visit_str<
-        E: Error,
-    >(&mut self, _v: &str) -> Result<Self::Value, E> {
+    fn visit_str<E>(&mut self, _v: &str) -> Result<Self::Value, E>
+        where E: Error,
+    {
         Err(Error::syntax_error())
     }
 
     #[inline]
-    fn visit_string<
-        E: Error,
-    >(&mut self, v: String) -> Result<Self::Value, E> {
+    fn visit_string<E>(&mut self, v: String) -> Result<Self::Value, E>
+        where E: Error,
+    {
         self.visit_str(&v)
     }
 
-    fn visit_unit<
-        E: Error,
-    >(&mut self) -> Result<Self::Value, E> {
+    fn visit_unit<E>(&mut self) -> Result<Self::Value, E>
+        where E: Error,
+    {
         Err(Error::syntax_error())
     }
 
     #[inline]
-    fn visit_named_unit<
-        E: Error,
-    >(&mut self, _name: &str) -> Result<Self::Value, E> {
+    fn visit_named_unit<E>(&mut self, _name: &str) -> Result<Self::Value, E>
+        where E: Error,
+    {
         self.visit_unit()
     }
 
-    fn visit_none<
-        E: Error,
-    >(&mut self) -> Result<Self::Value, E> {
+    fn visit_none<E>(&mut self) -> Result<Self::Value, E>
+        where E: Error,
+    {
         Err(Error::syntax_error())
     }
 
-    fn visit_some<
-        D: Deserializer,
-    >(&mut self, _deserializer: &mut D) -> Result<Self::Value, D::Error> {
+    fn visit_some<D>(&mut self, _deserializer: &mut D) -> Result<Self::Value, D::Error>
+        where D: Deserializer,
+    {
         Err(Error::syntax_error())
     }
 
-    fn visit_seq<
-        V: SeqVisitor,
-    >(&mut self, _visitor: V) -> Result<Self::Value, V::Error> {
+    fn visit_seq<V>(&mut self, _visitor: V) -> Result<Self::Value, V::Error>
+        where V: SeqVisitor,
+    {
         Err(Error::syntax_error())
     }
 
     #[inline]
-    fn visit_named_seq<
-        V: SeqVisitor,
-    >(&mut self, _name: &str, visitor: V) -> Result<Self::Value, V::Error> {
+    fn visit_named_seq<V>(&mut self, _name: &str, visitor: V) -> Result<Self::Value, V::Error>
+        where V: SeqVisitor,
+    {
         self.visit_seq(visitor)
     }
 
-    fn visit_map<
-        V: MapVisitor,
-    >(&mut self, _visitor: V) -> Result<Self::Value, V::Error> {
+    fn visit_map<V>(&mut self, _visitor: V) -> Result<Self::Value, V::Error>
+        where V: MapVisitor,
+    {
         Err(Error::syntax_error())
     }
 
     #[inline]
-    fn visit_named_map<
-        V: MapVisitor,
-    >(&mut self, _name: &str, visitor: V) -> Result<Self::Value, V::Error> {
+    fn visit_named_map<V>(&mut self, _name: &str, visitor: V) -> Result<Self::Value, V::Error>
+        where V: MapVisitor,
+    {
         self.visit_map(visitor)
     }
 
     #[inline]
-    fn visit_enum<
-        V: EnumVisitor,
-    >(&mut self, _name: &str, _variant: &str, _visitor: V) -> Result<Self::Value, V::Error> {
+    fn visit_enum<V>(&mut self,
+                     _name: &str,
+                     _variant: &str,
+                     _visitor: V) -> Result<Self::Value, V::Error>
+        where V: EnumVisitor,
+    {
         Err(Error::syntax_error())
     }
 
     #[inline]
-    fn visit_variant<
-        V: EnumVisitor,
-    >(&mut self, _name: &str, _visitor: V) -> Result<Self::Value, V::Error> {
+    fn visit_variant<V>(&mut self, _name: &str, _visitor: V) -> Result<Self::Value, V::Error>
+        where V: EnumVisitor,
+    {
         Err(Error::syntax_error())
     }
 }
@@ -262,15 +263,15 @@ pub trait EnumVisitor {
         Err(Error::syntax_error())
     }
 
-    fn visit_seq<
-        V: EnumSeqVisitor,
-    >(&mut self, _visitor: V) -> Result<V::Value, Self::Error> {
+    fn visit_seq<V>(&mut self, _visitor: V) -> Result<V::Value, Self::Error>
+        where V: EnumSeqVisitor,
+    {
         Err(Error::syntax_error())
     }
 
-    fn visit_map<
-        V: EnumMapVisitor,
-    >(&mut self, _visitor: V) -> Result<V::Value, Self::Error> {
+    fn visit_map<V>(&mut self, _visitor: V) -> Result<V::Value, Self::Error>
+        where V: EnumMapVisitor,
+    {
         Err(Error::syntax_error())
     }
 }
@@ -278,17 +279,15 @@ pub trait EnumVisitor {
 pub trait EnumSeqVisitor {
     type Value;
 
-    fn visit<
-        V: SeqVisitor,
-    >(&mut self, visitor: V) -> Result<Self::Value, V::Error>;
+    fn visit<V>(&mut self, visitor: V) -> Result<Self::Value, V::Error>
+        where V: SeqVisitor;
 }
 
 pub trait EnumMapVisitor {
     type Value;
 
-    fn visit<
-        V: MapVisitor,
-    >(&mut self, visitor: V) -> Result<Self::Value, V::Error>;
+    fn visit<V>(&mut self, visitor: V) -> Result<Self::Value, V::Error>
+        where V: MapVisitor;
 }
 
 ///////////////////////////////////////////////////////////////////////////////
@@ -298,23 +297,23 @@ struct UnitVisitor;
 impl Visitor for UnitVisitor {
     type Value = ();
 
-    fn visit_unit<
-        E: Error,
-    >(&mut self) -> Result<(), E> {
+    fn visit_unit<E>(&mut self) -> Result<(), E>
+        where E: Error,
+    {
         Ok(())
     }
 
-    fn visit_seq<
-        V: SeqVisitor,
-    >(&mut self, mut visitor: V) -> Result<(), V::Error> {
+    fn visit_seq<V>(&mut self, mut visitor: V) -> Result<(), V::Error>
+        where V: SeqVisitor,
+    {
         visitor.end()
     }
 }
 
 impl Deserialize for () {
-    fn deserialize<
-        D: Deserializer,
-    >(deserializer: &mut D) -> Result<(), D::Error> {
+    fn deserialize<D>(deserializer: &mut D) -> Result<(), D::Error>
+        where D: Deserializer,
+    {
         deserializer.visit(UnitVisitor)
     }
 }
@@ -326,17 +325,17 @@ struct BoolVisitor;
 impl Visitor for BoolVisitor {
     type Value = bool;
 
-    fn visit_bool<
-        E: Error,
-    >(&mut self, v: bool) -> Result<bool, E> {
+    fn visit_bool<E>(&mut self, v: bool) -> Result<bool, E>
+        where E: Error,
+    {
         Ok(v)
     }
 }
 
 impl Deserialize for bool {
-    fn deserialize<
-        D: Deserializer,
-    >(deserializer: &mut D) -> Result<bool, D::Error> {
+    fn deserialize<D>(deserializer: &mut D) -> Result<bool, D::Error>
+        where D: Deserializer,
+    {
         deserializer.visit(BoolVisitor)
     }
 }
@@ -346,9 +345,9 @@ impl Deserialize for bool {
 macro_rules! impl_deserialize_num_method {
     ($src_ty:ty, $method:ident, $from_method:ident) => {
         #[inline]
-        fn $method<
-            E: Error,
-        >(&mut self, v: $src_ty) -> Result<T, E> {
+        fn $method<E>(&mut self, v: $src_ty) -> Result<T, E>
+            where E: Error,
+        {
             match FromPrimitive::$from_method(v) {
                 Some(v) => Ok(v),
                 None => Err(Error::syntax_error()),
@@ -393,9 +392,9 @@ macro_rules! impl_deserialize_num {
     ($ty:ty) => {
         impl Deserialize for $ty {
             #[inline]
-            fn deserialize<
-                D: Deserializer,
-            >(deserializer: &mut D) -> Result<$ty, D::Error> {
+            fn deserialize<D>(deserializer: &mut D) -> Result<$ty, D::Error>
+                where D: Deserializer,
+            {
                 deserializer.visit(PrimitiveVisitor::new())
             }
         }
@@ -423,16 +422,16 @@ impl Visitor for CharVisitor {
     type Value = char;
 
     #[inline]
-    fn visit_char<
-        E: Error,
-    >(&mut self, v: char) -> Result<char, E> {
+    fn visit_char<E>(&mut self, v: char) -> Result<char, E>
+        where E: Error,
+    {
         Ok(v)
     }
 
     #[inline]
-    fn visit_str<
-        E: Error,
-    >(&mut self, v: &str) -> Result<char, E> {
+    fn visit_str<E>(&mut self, v: &str) -> Result<char, E>
+        where E: Error,
+    {
         let mut iter = v.chars();
         if let Some(v) = iter.next() {
             if iter.next().is_some() {
@@ -448,9 +447,9 @@ impl Visitor for CharVisitor {
 
 impl Deserialize for char {
     #[inline]
-    fn deserialize<
-        D: Deserializer,
-    >(deserializer: &mut D) -> Result<char, D::Error> {
+    fn deserialize<D>(deserializer: &mut D) -> Result<char, D::Error>
+        where D: Deserializer,
+    {
         deserializer.visit(CharVisitor)
     }
 }
@@ -462,23 +461,23 @@ struct StringVisitor;
 impl Visitor for StringVisitor {
     type Value = String;
 
-    fn visit_str<
-        E: Error,
-    >(&mut self, v: &str) -> Result<String, E> {
+    fn visit_str<E>(&mut self, v: &str) -> Result<String, E>
+        where E: Error,
+    {
         Ok(v.to_string())
     }
 
-    fn visit_string<
-        E: Error,
-    >(&mut self, v: String) -> Result<String, E> {
+    fn visit_string<E>(&mut self, v: String) -> Result<String, E>
+        where E: Error,
+    {
         Ok(v)
     }
 }
 
 impl Deserialize for String {
-    fn deserialize<
-        D: Deserializer,
-    >(deserializer: &mut D) -> Result<String, D::Error> {
+    fn deserialize<D>(deserializer: &mut D) -> Result<String, D::Error>
+        where D: Deserializer,
+    {
         deserializer.visit(StringVisitor)
     }
 }
@@ -495,24 +494,24 @@ impl<
     type Value = Option<T>;
 
     #[inline]
-    fn visit_none<
-        E: Error,
-    >(&mut self) -> Result<Option<T>, E> {
+    fn visit_none<E>(&mut self) -> Result<Option<T>, E>
+        where E: Error,
+    {
         Ok(None)
     }
 
     #[inline]
-    fn visit_some<
-        D: Deserializer,
-    >(&mut self, deserializer: &mut D) -> Result<Option<T>, D::Error> {
+    fn visit_some<D>(&mut self, deserializer: &mut D) -> Result<Option<T>, D::Error>
+        where D: Deserializer,
+    {
         Ok(Some(try!(Deserialize::deserialize(deserializer))))
     }
 }
 
 impl<T> Deserialize for Option<T> where T: Deserialize {
-    fn deserialize<
-        D: Deserializer,
-    >(deserializer: &mut D) -> Result<Option<T>, D::Error> {
+    fn deserialize<D>(deserializer: &mut D) -> Result<Option<T>, D::Error>
+        where D: Deserializer,
+    {
         deserializer.visit_option(OptionVisitor { marker: PhantomData })
     }
 }
@@ -527,9 +526,9 @@ impl<T> Visitor for VecVisitor<T> where T: Deserialize {
     type Value = Vec<T>;
 
     #[inline]
-    fn visit_seq<
-        V: SeqVisitor,
-    >(&mut self, mut visitor: V) -> Result<Vec<T>, V::Error> {
+    fn visit_seq<V>(&mut self, mut visitor: V) -> Result<Vec<T>, V::Error>
+        where V: SeqVisitor,
+    {
         let (len, _) = visitor.size_hint();
         let mut values = Vec::with_capacity(len);
 
@@ -542,9 +541,9 @@ impl<T> Visitor for VecVisitor<T> where T: Deserialize {
 }
 
 impl<T: Deserialize> Deserialize for Vec<T> {
-    fn deserialize<
-        D: Deserializer,
-    >(deserializer: &mut D) -> Result<Vec<T>, D::Error> {
+    fn deserialize<D>(deserializer: &mut D) -> Result<Vec<T>, D::Error>
+        where D: Deserializer,
+    {
         deserializer.visit(VecVisitor { marker: PhantomData })
     }
 }
@@ -566,9 +565,9 @@ macro_rules! tuple_impls {
 
                 #[inline]
                 #[allow(non_snake_case)]
-                fn visit_seq<
-                    V: SeqVisitor,
-                >(&mut self, mut visitor: V) -> Result<($($name,)+), V::Error> {
+                fn visit_seq<V>(&mut self, mut visitor: V) -> Result<($($name,)+), V::Error>
+                    where V: SeqVisitor,
+                {
                     $(
                         let $name = match try!(visitor.visit()) {
                             Some(value) => value,
@@ -586,9 +585,9 @@ macro_rules! tuple_impls {
                 $($name: Deserialize),+
             > Deserialize for ($($name,)+) {
                 #[inline]
-                fn deserialize<
-                    D: Deserializer,
-                >(deserializer: &mut D) -> Result<($($name,)+), D::Error> {
+                fn deserialize<D>(deserializer: &mut D) -> Result<($($name,)+), D::Error>
+                    where D: Deserializer,
+                {
                     deserializer.visit($visitor { marker: PhantomData })
                 }
             }
@@ -624,9 +623,9 @@ impl<K, V> Visitor for HashMapVisitor<K, V>
     type Value = HashMap<K, V>;
 
     #[inline]
-    fn visit_map<
-        V_: MapVisitor,
-    >(&mut self, mut visitor: V_) -> Result<HashMap<K, V>, V_::Error> {
+    fn visit_map<V_>(&mut self, mut visitor: V_) -> Result<HashMap<K, V>, V_::Error>
+        where V_: MapVisitor,
+    {
         let (len, _) = visitor.size_hint();
         let mut values = HashMap::with_capacity(len);
 
@@ -642,9 +641,9 @@ impl<K, V> Deserialize for HashMap<K, V>
     where K: Deserialize + Eq + Hash,
           V: Deserialize,
 {
-    fn deserialize<
-        D: Deserializer,
-    >(deserializer: &mut D) -> Result<HashMap<K, V>, D::Error> {
+    fn deserialize<D>(deserializer: &mut D) -> Result<HashMap<K, V>, D::Error>
+        where D: Deserializer,
+    {
         deserializer.visit(HashMapVisitor { marker: PhantomData })
     }
 }
@@ -662,9 +661,9 @@ impl<K, V> Visitor for BTreeMapVisitor<K, V>
     type Value = BTreeMap<K, V>;
 
     #[inline]
-    fn visit_map<
-        Visitor: MapVisitor,
-    >(&mut self, mut visitor: Visitor) -> Result<BTreeMap<K, V>, Visitor::Error> {
+    fn visit_map<Visitor>(&mut self, mut visitor: Visitor) -> Result<BTreeMap<K, V>, Visitor::Error>
+        where Visitor: MapVisitor,
+    {
         let mut values = BTreeMap::new();
 
         while let Some((key, value)) = try!(visitor.visit()) {
@@ -679,9 +678,9 @@ impl<
     K: Deserialize + Eq + Ord,
     V: Deserialize,
 > Deserialize for BTreeMap<K, V> {
-    fn deserialize<
-        D: Deserializer,
-    >(deserializer: &mut D) -> Result<BTreeMap<K, V>, D::Error> {
+    fn deserialize<D>(deserializer: &mut D) -> Result<BTreeMap<K, V>, D::Error>
+        where D: Deserializer,
+    {
         deserializer.visit(BTreeMapVisitor { marker: PhantomData })
     }
 }
@@ -763,9 +762,9 @@ mod tests {
     impl<'a> Deserializer for TokenDeserializer<'a> {
         type Error = Error;
 
-        fn visit<
-            V: Visitor,
-        >(&mut self, mut visitor: V) -> Result<V::Value, Error> {
+        fn visit<V>(&mut self, mut visitor: V) -> Result<V::Value, Error>
+            where V: Visitor,
+        {
             match self.tokens.next() {
                 Some(Token::Bool(v)) => visitor.visit_bool(v),
                 Some(Token::Isize(v)) => visitor.visit_isize(v),
@@ -828,9 +827,9 @@ mod tests {
         /// Hook into `Option` deserializing so we can treat `Unit` as a
         /// `None`, or a regular value as `Some(value)`.
         #[inline]
-        fn visit_option<
-            V: Visitor,
-        >(&mut self, mut visitor: V) -> Result<V::Value, Error> {
+        fn visit_option<V>(&mut self, mut visitor: V) -> Result<V::Value, Error>
+            where V: Visitor,
+        {
             match self.tokens.peek() {
                 Some(&Token::Option(false)) => {
                     self.tokens.next();
@@ -861,9 +860,9 @@ mod tests {
     impl<'a, 'b> super::SeqVisitor for TokenDeserializerSeqVisitor<'a, 'b> {
         type Error = Error;
 
-        fn visit<
-            T: Deserialize,
-        >(&mut self) -> Result<Option<T>, Error> {
+        fn visit<T>(&mut self) -> Result<Option<T>, Error>
+            where T: Deserialize,
+        {
             let first = self.first;
             self.first = false;
 
@@ -904,9 +903,9 @@ mod tests {
     impl<'a, 'b> super::MapVisitor for TokenDeserializerMapVisitor<'a, 'b> {
         type Error = Error;
 
-        fn visit_key<
-            K: Deserialize,
-        >(&mut self) -> Result<Option<K>, Error> {
+        fn visit_key<K>(&mut self) -> Result<Option<K>, Error>
+            where K: Deserialize,
+        {
             let first = self.first;
             self.first = false;
 
@@ -920,9 +919,9 @@ mod tests {
             }
         }
 
-        fn visit_value<
-            V: Deserialize,
-        >(&mut self) -> Result<V, Error> {
+        fn visit_value<V>(&mut self) -> Result<V, Error>
+            where V: Deserialize,
+        {
             Ok(try!(Deserialize::deserialize(self.de)))
         }
 
@@ -1010,9 +1009,9 @@ mod tests {
     struct NamedUnit;
 
     impl Deserialize for NamedUnit {
-        fn deserialize<
-            D: Deserializer,
-        >(deserializer: &mut D) -> Result<NamedUnit, D::Error> {
+        fn deserialize<D>(deserializer: &mut D) -> Result<NamedUnit, D::Error>
+            where D: Deserializer,
+        {
             deserializer.visit(NamedUnitVisitor)
         }
     }
@@ -1052,9 +1051,9 @@ mod tests {
     struct NamedSeq(i32, i32, i32);
 
     impl Deserialize for NamedSeq {
-        fn deserialize<
-            D: Deserializer,
-        >(deserializer: &mut D) -> Result<NamedSeq, D::Error> {
+        fn deserialize<D>(deserializer: &mut D) -> Result<NamedSeq, D::Error>
+            where D: Deserializer,
+        {
             deserializer.visit(NamedSeqVisitor)
         }
     }
@@ -1108,9 +1107,9 @@ mod tests {
     }
 
     impl Deserialize for NamedMap {
-        fn deserialize<
-            D: Deserializer,
-        >(deserializer: &mut D) -> Result<NamedMap, D::Error> {
+        fn deserialize<D>(deserializer: &mut D) -> Result<NamedMap, D::Error>
+            where D: Deserializer,
+        {
             deserializer.visit(NamedMapVisitor)
         }
     }
@@ -1159,9 +1158,9 @@ mod tests {
     }
 
     impl Deserialize for NamedMapField {
-        fn deserialize<
-            D: Deserializer,
-        >(deserializer: &mut D) -> Result<NamedMapField, D::Error> {
+        fn deserialize<D>(deserializer: &mut D) -> Result<NamedMapField, D::Error>
+        where D: Deserializer,
+    {
             deserializer.visit(NamedMapFieldVisitor)
         }
     }
@@ -1193,9 +1192,9 @@ mod tests {
     }
 
     impl Deserialize for Enum {
-        fn deserialize<
-            D: Deserializer,
-        >(deserializer: &mut D) -> Result<Enum, D::Error> {
+        fn deserialize<D>(deserializer: &mut D) -> Result<Enum, D::Error>
+            where D: Deserializer,
+        {
             deserializer.visit(EnumVisitor)
         }
     }
@@ -1293,9 +1292,9 @@ mod tests {
     }
 
     impl Deserialize for EnumMapField {
-        fn deserialize<
-            D: Deserializer,
-        >(deserializer: &mut D) -> Result<EnumMapField, D::Error> {
+        fn deserialize<D>(deserializer: &mut D) -> Result<EnumMapField, D::Error>
+            where D: Deserializer,
+        {
             deserializer.visit(EnumMapFieldVisitor)
         }
     }
diff --git a/serde2/src/json/de.rs b/serde2/src/json/de.rs
index 3021cd56..26c2180e 100644
--- a/serde2/src/json/de.rs
+++ b/serde2/src/json/de.rs
@@ -81,9 +81,9 @@ impl<Iter: Iterator<Item=u8>> Deserializer<Iter> {
     }
 
     #[inline]
-    fn parse_value<
-        V: de::Visitor,
-    >(&mut self, mut visitor: V) -> Result<V::Value, Error> {
+    fn parse_value<V>(&mut self, mut visitor: V) -> Result<V::Value, Error>
+        where V: de::Visitor,
+    {
         self.parse_whitespace();
 
         if self.eof() {
@@ -140,9 +140,9 @@ impl<Iter: Iterator<Item=u8>> Deserializer<Iter> {
     }
 
     #[inline]
-    fn parse_number<
-        V: de::Visitor,
-    >(&mut self, mut visitor: V) -> Result<V::Value, Error> {
+    fn parse_number<V>(&mut self, mut visitor: V) -> Result<V::Value, Error>
+        where V: de::Visitor,
+    {
         let mut neg = 1;
 
         if self.ch_is(b'-') {
@@ -387,9 +387,9 @@ impl<Iter: Iterator<Item=u8>> de::Deserializer for Deserializer<Iter> {
     type Error = Error;
 
     #[inline]
-    fn visit<
-        V: de::Visitor,
-    >(&mut self, visitor: V) -> Result<V::Value, Error> {
+    fn visit<V>(&mut self, visitor: V) -> Result<V::Value, Error>
+        where V: de::Visitor,
+    {
         self.parse_value(visitor)
     }
 }
@@ -402,9 +402,9 @@ struct SeqVisitor<'a, Iter: 'a> {
 impl<'a, Iter: Iterator<Item=u8>> de::SeqVisitor for SeqVisitor<'a, Iter> {
     type Error = Error;
 
-    fn visit<
-        T: de::Deserialize,
-    >(&mut self) -> Result<Option<T>, Error> {
+    fn visit<T>(&mut self) -> Result<Option<T>, Error>
+        where T: de::Deserialize,
+    {
         self.de.parse_whitespace();
 
         if self.de.ch_is(b']') {
@@ -448,9 +448,9 @@ struct MapVisitor<'a, Iter: 'a> {
 impl<'a, Iter: Iterator<Item=u8>> de::MapVisitor for MapVisitor<'a, Iter> {
     type Error = Error;
 
-    fn visit_key<
-        K: de::Deserialize,
-    >(&mut self) -> Result<Option<K>, Error> {
+    fn visit_key<K>(&mut self) -> Result<Option<K>, Error>
+        where K: de::Deserialize,
+    {
         self.de.parse_whitespace();
 
         if self.de.ch_is(b'}') {
@@ -482,9 +482,9 @@ impl<'a, Iter: Iterator<Item=u8>> de::MapVisitor for MapVisitor<'a, Iter> {
         Ok(Some(try!(de::Deserialize::deserialize(self.de))))
     }
 
-    fn visit_value<
-        V: de::Deserialize,
-    >(&mut self) -> Result<V, Error> {
+    fn visit_value<V>(&mut self) -> Result<V, Error>
+        where V: de::Deserialize,
+    {
         self.de.parse_whitespace();
 
         if self.de.ch_is(b':') {
diff --git a/serde2/src/json/ser.rs b/serde2/src/json/ser.rs
index 7cb27a4d..aa316e50 100644
--- a/serde2/src/json/ser.rs
+++ b/serde2/src/json/ser.rs
@@ -32,9 +32,9 @@ impl<W: io::Write> ser::Serializer for Serializer<W> {
     type Error = io::Error;
 
     #[inline]
-    fn visit<
-        T: ser::Serialize,
-    >(&mut self, value: &T) -> io::Result<()> {
+    fn visit<T>(&mut self, value: &T) -> io::Result<()>
+        where T: ser::Serialize,
+    {
         value.visit(&mut Visitor { writer: &mut self.writer })
     }
 }
diff --git a/serde2/src/json/value.rs b/serde2/src/json/value.rs
index ac513a35..3d84c67a 100644
--- a/serde2/src/json/value.rs
+++ b/serde2/src/json/value.rs
@@ -21,9 +21,9 @@ pub enum Value {
 
 impl ser::Serialize for Value {
     #[inline]
-    fn visit<
-        V: ser::Visitor,
-    >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+    fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+        where V: ser::Visitor,
+    {
         match *self {
             Value::Null => visitor.visit_unit(),
             Value::Bool(v) => visitor.visit_bool(v),
@@ -91,9 +91,9 @@ impl ser::Serializer for Serializer {
     type Error = ();
 
     #[inline]
-    fn visit<
-        T: ser::Serialize,
-    >(&mut self, value: &T) -> Result<(), ()> {
+    fn visit<T>(&mut self, value: &T) -> Result<(), ()>
+        where T: ser::Serialize,
+    {
         try!(value.visit(self));
         Ok(())
     }
@@ -151,9 +151,9 @@ impl ser::Visitor for Serializer {
     }
 
     #[inline]
-    fn visit_some<
-        V: ser::Serialize,
-    >(&mut self, value: V) -> Result<(), ()> {
+    fn visit_some<V>(&mut self, value: V) -> Result<(), ()>
+        where V: ser::Serialize,
+    {
         value.visit(self)
     }
 
@@ -265,9 +265,9 @@ impl de::Deserializer for Deserializer {
     type Error = Error;
 
     #[inline]
-    fn visit<
-        V: de::Visitor,
-    >(&mut self, mut visitor: V) -> Result<V::Value, Error> {
+    fn visit<V>(&mut self, mut visitor: V) -> Result<V::Value, Error>
+        where V: de::Visitor,
+    {
         let value = match self.value.take() {
             Some(value) => value,
             None => { return Err(de::Error::end_of_stream_error()); }
@@ -300,9 +300,9 @@ impl de::Deserializer for Deserializer {
     }
 
     #[inline]
-    fn visit_option<
-        V: de::Visitor,
-    >(&mut self, mut visitor: V) -> Result<V::Value, Error> {
+    fn visit_option<V>(&mut self, mut visitor: V) -> Result<V::Value, Error>
+        where V: de::Visitor,
+    {
         match self.value {
             Some(Value::Null) => visitor.visit_none(),
             Some(_) => visitor.visit_some(self),
diff --git a/serde2/src/ser.rs b/serde2/src/ser.rs
index 761820ee..b1b8d8fe 100644
--- a/serde2/src/ser.rs
+++ b/serde2/src/ser.rs
@@ -171,9 +171,8 @@ pub trait Visitor {
 }
 
 pub trait SeqVisitor {
-    fn visit<
-        V: Visitor,
-    >(&mut self, visitor: &mut V) -> Result<Option<V::Value>, V::Error>;
+    fn visit<V>(&mut self, visitor: &mut V) -> Result<Option<V::Value>, V::Error>
+        where V: Visitor;
 
     #[inline]
     fn size_hint(&self) -> (usize, Option<usize>) {
@@ -182,9 +181,8 @@ pub trait SeqVisitor {
 }
 
 pub trait MapVisitor {
-    fn visit<
-        V: Visitor,
-    >(&mut self, visitor: &mut V) -> Result<Option<V::Value>, V::Error>;
+    fn visit<V>(&mut self, visitor: &mut V) -> Result<Option<V::Value>, V::Error>
+        where V: Visitor;
 
     #[inline]
     fn size_hint(&self) -> (usize, Option<usize>) {
@@ -198,9 +196,9 @@ macro_rules! impl_visit {
     ($ty:ty, $method:ident) => {
         impl Serialize for $ty {
             #[inline]
-            fn visit<
-                V: Visitor,
-            >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+            fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+                where V: Visitor,
+            {
                 visitor.$method(*self)
             }
         }
@@ -226,18 +224,18 @@ impl_visit!(char, visit_char);
 
 impl<'a> Serialize for &'a str {
     #[inline]
-    fn visit<
-        V: Visitor,
-    >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+    fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+        where V: Visitor,
+    {
         visitor.visit_str(*self)
     }
 }
 
 impl Serialize for String {
     #[inline]
-    fn visit<
-        V: Visitor,
-    >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+    fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+        where V: Visitor,
+    {
         (&self[..]).visit(visitor)
     }
 }
@@ -246,9 +244,9 @@ impl Serialize for String {
 
 impl<T> Serialize for Option<T> where T: Serialize {
     #[inline]
-    fn visit<
-        V: Visitor,
-    >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+    fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+        where V: Visitor,
+    {
         match *self {
             Some(ref value) => visitor.visit_some(value),
             None => visitor.visit_none(),
@@ -263,7 +261,9 @@ pub struct SeqIteratorVisitor<Iter> {
     first: bool,
 }
 
-impl<T, Iter: Iterator<Item=T>> SeqIteratorVisitor<Iter> {
+impl<T, Iter> SeqIteratorVisitor<Iter>
+    where Iter: Iterator<Item=T>
+{
     #[inline]
     pub fn new(iter: Iter) -> SeqIteratorVisitor<Iter> {
         SeqIteratorVisitor {
@@ -273,14 +273,14 @@ impl<T, Iter: Iterator<Item=T>> SeqIteratorVisitor<Iter> {
     }
 }
 
-impl<
-    T: Serialize,
-    Iter: Iterator<Item=T>,
-> SeqVisitor for SeqIteratorVisitor<Iter> {
+impl<T, Iter> SeqVisitor for SeqIteratorVisitor<Iter>
+    where T: Serialize,
+          Iter: Iterator<Item=T>,
+{
     #[inline]
-    fn visit<
-        V: Visitor,
-    >(&mut self, visitor: &mut V) -> Result<Option<V::Value>, V::Error> {
+    fn visit<V>(&mut self, visitor: &mut V) -> Result<Option<V::Value>, V::Error>
+        where V: Visitor,
+    {
         let first = self.first;
         self.first = false;
 
@@ -301,34 +301,31 @@ impl<
 
 ///////////////////////////////////////////////////////////////////////////////
 
-impl<
-    'a,
-    T: Serialize,
-> Serialize for &'a [T] {
+impl<'a, T> Serialize for &'a [T]
+    where T: Serialize,
+{
     #[inline]
-    fn visit<
-        V: Visitor,
-    >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+    fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+        where V: Visitor,
+    {
         visitor.visit_seq(SeqIteratorVisitor::new(self.iter()))
     }
 }
 
-impl<
-    T: Serialize,
-> Serialize for Vec<T> {
+impl<T> Serialize for Vec<T> where T: Serialize {
     #[inline]
-    fn visit<
-        V: Visitor,
-    >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+    fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+        where V: Visitor,
+    {
         (&self[..]).visit(visitor)
     }
 }
 
 impl<T> Serialize for BTreeSet<T> where T: Serialize {
     #[inline]
-    fn visit<
-        V: Visitor,
-    >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+    fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+        where V: Visitor,
+    {
         visitor.visit_seq(SeqIteratorVisitor::new(self.iter()))
     }
 }
@@ -347,9 +344,9 @@ impl<T, S> Serialize for HashSet<T, S>
 
 impl Serialize for () {
     #[inline]
-    fn visit<
-        V: Visitor,
-    >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+    fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+        where V: Visitor,
+    {
         visitor.visit_unit()
     }
 }
@@ -384,13 +381,12 @@ macro_rules! tuple_impls {
                 }
             }
 
-            impl<
-                'a,
-                $($T: Serialize),+
-            > SeqVisitor for $TupleVisitor<'a, $($T),+> {
-                fn visit<
-                    V: Visitor,
-                >(&mut self, visitor: &mut V) -> Result<Option<V::Value>, V::Error> {
+            impl<'a, $($T),+> SeqVisitor for $TupleVisitor<'a, $($T),+>
+                where $($T: Serialize),+
+            {
+                fn visit<V>(&mut self, visitor: &mut V) -> Result<Option<V::Value>, V::Error>
+                    where V: Visitor,
+                {
                     let first = self.first;
                     self.first = false;
 
@@ -412,9 +408,9 @@ macro_rules! tuple_impls {
                 }
             }
 
-            impl<
-                $($T: Serialize),+
-            > Serialize for ($($T,)+) {
+            impl<$($T),+> Serialize for ($($T,)+)
+                where $($T: Serialize),+
+            {
                 #[inline]
                 fn visit<V: Visitor>(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
                     visitor.visit_seq($TupleVisitor::new(self))
@@ -536,7 +532,9 @@ pub struct MapIteratorVisitor<Iter> {
     first: bool,
 }
 
-impl<K, V, Iter: Iterator<Item=(K, V)>> MapIteratorVisitor<Iter> {
+impl<K, V, Iter> MapIteratorVisitor<Iter>
+    where Iter: Iterator<Item=(K, V)>
+{
     #[inline]
     pub fn new(iter: Iter) -> MapIteratorVisitor<Iter> {
         MapIteratorVisitor {
@@ -552,9 +550,9 @@ impl<K, V, I> MapVisitor for MapIteratorVisitor<I>
           I: Iterator<Item=(K, V)>,
 {
     #[inline]
-    fn visit<
-        V_: Visitor,
-    >(&mut self, visitor: &mut V_) -> Result<Option<V_::Value>, V_::Error> {
+    fn visit<V_>(&mut self, visitor: &mut V_) -> Result<Option<V_::Value>, V_::Error>
+        where V_: Visitor,
+    {
         let first = self.first;
         self.first = false;
 
@@ -600,42 +598,40 @@ impl<K, V, S> Serialize for HashMap<K, V, S>
 
 impl<'a, T> Serialize for &'a T where T: Serialize {
     #[inline]
-    fn visit<
-        V: Visitor,
-    >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+    fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+        where V: Visitor,
+    {
         (**self).visit(visitor)
     }
 }
 
 impl<'a, T> Serialize for Box<T> where T: Serialize {
     #[inline]
-    fn visit<
-        V: Visitor,
-    >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+    fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+        where V: Visitor,
+    {
         (**self).visit(visitor)
     }
 }
 
-impl<
-    'a,
-    T: Serialize,
-> Serialize for Rc<T> {
+impl<'a, T> Serialize for Rc<T>
+    where T: Serialize,
+{
     #[inline]
-    fn visit<
-        V: Visitor,
-    >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+    fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+        where V: Visitor,
+    {
         (**self).visit(visitor)
     }
 }
 
-impl<
-    'a,
-    T: Serialize,
-> Serialize for Arc<T> {
+impl<'a, T> Serialize for Arc<T>
+    where T: Serialize,
+{
     #[inline]
-    fn visit<
-        V: Visitor,
-    >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+    fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+        where V: Visitor,
+    {
         (**self).visit(visitor)
     }
 }
@@ -923,9 +919,9 @@ mod tests {
     struct NamedUnit;
 
     impl Serialize for NamedUnit {
-        fn visit<
-            V: Visitor,
-        >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+        fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+            where V: Visitor,
+        {
             visitor.visit_named_unit("NamedUnit")
         }
     }
@@ -933,9 +929,9 @@ mod tests {
     struct NamedSeq(i32, i32, i32);
 
     impl Serialize for NamedSeq {
-        fn visit<
-            V: Visitor,
-        >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+        fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+            where V: Visitor,
+        {
             visitor.visit_named_seq("NamedSeq", NamedSeqVisitor {
                 tuple: self,
                 state: 0,
@@ -949,9 +945,9 @@ mod tests {
     }
 
     impl<'a> SeqVisitor for NamedSeqVisitor<'a> {
-        fn visit<
-            V: Visitor,
-        >(&mut self, visitor: &mut V) -> Result<Option<V::Value>, V::Error> {
+        fn visit<V>(&mut self, visitor: &mut V) -> Result<Option<V::Value>, V::Error>
+            where V: Visitor,
+        {
             match self.state {
                 0 => {
                     self.state += 1;
@@ -981,9 +977,9 @@ mod tests {
     }
 
     impl Serialize for Enum {
-        fn visit<
-            V: Visitor,
-        >(&self, visitor: &mut V) -> Result<V::Value, V::Error> {
+        fn visit<V>(&self, visitor: &mut V) -> Result<V::Value, V::Error>
+            where V: Visitor,
+        {
             match *self {
                 Enum::Unit => {
                     visitor.visit_enum_unit("Enum", "Unit")
@@ -1013,9 +1009,9 @@ mod tests {
     }
 
     impl<'a> SeqVisitor for EnumSeqVisitor<'a> {
-        fn visit<
-            V: Visitor,
-        >(&mut self, visitor: &mut V) -> Result<Option<V::Value>, V::Error> {
+        fn visit<V>(&mut self, visitor: &mut V) -> Result<Option<V::Value>, V::Error>
+            where V: Visitor,
+        {
             match self.state {
                 0 => {
                     self.state += 1;
@@ -1043,9 +1039,9 @@ mod tests {
     }
 
     impl<'a> MapVisitor for EnumMapVisitor<'a> {
-        fn visit<
-            V: Visitor,
-        >(&mut self, visitor: &mut V) -> Result<Option<V::Value>, V::Error> {
+        fn visit<V>(&mut self, visitor: &mut V) -> Result<Option<V::Value>, V::Error>
+            where V: Visitor,
+        {
             match self.state {
                 0 => {
                     self.state += 1;