diff --git a/serde/src/bytes.rs b/serde/src/bytes.rs index 8f914839..52cc1caf 100644 --- a/serde/src/bytes.rs +++ b/serde/src/bytes.rs @@ -60,9 +60,7 @@ pub struct Bytes<'a> { impl<'a> Bytes<'a> { /// Wrap an existing `&[u8]`. pub fn new(bytes: &'a [u8]) -> Self { - Bytes { - bytes: bytes, - } + Bytes { bytes: bytes } } } @@ -98,7 +96,9 @@ impl<'a> Into<&'a [u8]> for Bytes<'a> { impl<'a> ops::Deref for Bytes<'a> { type Target = [u8]; - fn deref(&self) -> &[u8] { self.bytes } + fn deref(&self) -> &[u8] { + self.bytes + } } impl<'a> ser::Serialize for Bytes<'a> { @@ -161,9 +161,7 @@ mod bytebuf { /// Wrap existing bytes in a `ByteBuf`. pub fn from>>(bytes: T) -> Self { - ByteBuf { - bytes: bytes.into(), - } + ByteBuf { bytes: bytes.into() } } } @@ -216,11 +214,15 @@ mod bytebuf { impl ops::Deref for ByteBuf { type Target = [u8]; - fn deref(&self) -> &[u8] { &self.bytes[..] } + fn deref(&self) -> &[u8] { + &self.bytes[..] + } } impl ops::DerefMut for ByteBuf { - fn deref_mut(&mut self) -> &mut [u8] { &mut self.bytes[..] } + fn deref_mut(&mut self) -> &mut [u8] { + &mut self.bytes[..] + } } impl ser::Serialize for ByteBuf { @@ -243,14 +245,14 @@ mod bytebuf { #[inline] fn visit_unit(self) -> Result - where E: de::Error, + where E: de::Error { Ok(ByteBuf::new()) } #[inline] fn visit_seq(self, mut visitor: V) -> Result - where V: de::SeqVisitor, + where V: de::SeqVisitor { let (len, _) = visitor.size_hint(); let mut values = Vec::with_capacity(len); @@ -264,26 +266,26 @@ mod bytebuf { #[inline] fn visit_bytes(self, v: &[u8]) -> Result - where E: de::Error, + where E: de::Error { Ok(ByteBuf::from(v)) } #[inline] fn visit_byte_buf(self, v: Vec) -> Result - where E: de::Error, + where E: de::Error { Ok(ByteBuf::from(v)) } fn visit_str(self, v: &str) -> Result - where E: de::Error, + where E: de::Error { Ok(ByteBuf::from(v)) } fn visit_string(self, v: String) -> Result - where E: de::Error, + where E: de::Error { Ok(ByteBuf::from(v)) } @@ -302,7 +304,9 @@ mod bytebuf { /////////////////////////////////////////////////////////////////////////////// #[inline] -fn escape_bytestring<'a>(bytes: &'a [u8]) -> iter::FlatMap, char::EscapeDefault, fn(&u8) -> char::EscapeDefault> { +fn escape_bytestring<'a> + (bytes: &'a [u8]) + -> iter::FlatMap, char::EscapeDefault, fn(&u8) -> char::EscapeDefault> { fn f(b: &u8) -> char::EscapeDefault { char::from_u32(*b as u32).unwrap().escape_default() } diff --git a/serde/src/de/content.rs b/serde/src/de/content.rs index 59c3f8ae..d3bd0b64 100644 --- a/serde/src/de/content.rs +++ b/serde/src/de/content.rs @@ -19,16 +19,8 @@ use collections::{String, Vec}; #[cfg(all(feature = "alloc", not(feature = "std")))] use alloc::boxed::Box; -use de::{ - self, - Deserialize, - DeserializeSeed, - Deserializer, - Visitor, - SeqVisitor, - MapVisitor, - EnumVisitor, -}; +use de::{self, Deserialize, DeserializeSeed, Deserializer, Visitor, SeqVisitor, MapVisitor, + EnumVisitor}; /// Used from generated code to buffer the contents of the Deserializer when /// deserializing untagged enums and internally tagged enums. @@ -243,9 +235,7 @@ struct TagOrContentVisitor { impl TagOrContentVisitor { fn new(name: &'static str) -> Self { - TagOrContentVisitor { - name: name, - } + TagOrContentVisitor { name: name } } } @@ -491,9 +481,7 @@ impl Visitor for TaggedContentVisitor } } match tag { - None => { - Err(de::Error::missing_field(self.tag_name)) - } + None => Err(de::Error::missing_field(self.tag_name)), Some(tag) => { Ok(TaggedContent { tag: tag, @@ -544,14 +532,15 @@ impl Deserializer for ContentDeserializer let value = try!(visitor.visit_seq(&mut seq_visitor)); try!(seq_visitor.end()); Ok(value) - }, + } Content::Map(v) => { - let map = v.into_iter().map(|(k, v)| (ContentDeserializer::new(k), ContentDeserializer::new(v))); + let map = v.into_iter() + .map(|(k, v)| (ContentDeserializer::new(k), ContentDeserializer::new(v))); let mut map_visitor = de::value::MapDeserializer::new(map); let value = try!(visitor.visit_map(&mut map_visitor)); try!(map_visitor.end()); Ok(value) - }, + } Content::Bytes(v) => visitor.visit_byte_buf(v), } } @@ -563,7 +552,7 @@ impl Deserializer for ContentDeserializer Content::None => visitor.visit_none(), Content::Some(v) => visitor.visit_some(ContentDeserializer::new(*v)), Content::Unit => visitor.visit_unit(), - _ => visitor.visit_some(self) + _ => visitor.visit_some(self), } } @@ -630,14 +619,16 @@ impl<'a, E> Deserializer for ContentRefDeserializer<'a, E> let value = try!(visitor.visit_seq(&mut seq_visitor)); try!(seq_visitor.end()); Ok(value) - }, + } Content::Map(ref v) => { - let map = v.into_iter().map(|&(ref k, ref v)| (ContentRefDeserializer::new(k), ContentRefDeserializer::new(v))); + let map = v.into_iter().map(|&(ref k, ref v)| { + (ContentRefDeserializer::new(k), ContentRefDeserializer::new(v)) + }); let mut map_visitor = de::value::MapDeserializer::new(map); let value = try!(visitor.visit_map(&mut map_visitor)); try!(map_visitor.end()); Ok(value) - }, + } Content::Bytes(ref v) => visitor.visit_bytes(v), } } @@ -649,7 +640,7 @@ impl<'a, E> Deserializer for ContentRefDeserializer<'a, E> Content::None => visitor.visit_none(), Content::Some(ref v) => visitor.visit_some(ContentRefDeserializer::new(v)), Content::Unit => visitor.visit_unit(), - _ => visitor.visit_some(self) + _ => visitor.visit_some(self), } } diff --git a/serde/src/de/impls.rs b/serde/src/de/impls.rs index fa3cd214..e933d692 100644 --- a/serde/src/de/impls.rs +++ b/serde/src/de/impls.rs @@ -6,26 +6,10 @@ use std::borrow::Cow; use collections::borrow::Cow; #[cfg(all(feature = "collections", not(feature = "std")))] -use collections::{ - BinaryHeap, - BTreeMap, - BTreeSet, - LinkedList, - VecDeque, - Vec, - String, -}; +use collections::{BinaryHeap, BTreeMap, BTreeSet, LinkedList, VecDeque, Vec, String}; #[cfg(feature = "std")] -use std::collections::{ - HashMap, - HashSet, - BinaryHeap, - BTreeMap, - BTreeSet, - LinkedList, - VecDeque, -}; +use std::collections::{HashMap, HashSet, BinaryHeap, BTreeMap, BTreeSet, LinkedList, VecDeque}; #[cfg(feature = "collections")] use collections::borrow::ToOwned; @@ -63,17 +47,8 @@ use core::nonzero::{NonZero, Zeroable}; #[allow(deprecated)] // required for impl Deserialize for NonZero use core::num::Zero; -use de::{ - Deserialize, - Deserializer, - EnumVisitor, - Error, - MapVisitor, - SeqVisitor, - Unexpected, - VariantVisitor, - Visitor, -}; +use de::{Deserialize, Deserializer, EnumVisitor, Error, MapVisitor, SeqVisitor, Unexpected, + VariantVisitor, Visitor}; use de::from_primitive::FromPrimitive; /////////////////////////////////////////////////////////////////////////////// @@ -89,13 +64,13 @@ impl Visitor for UnitVisitor { } fn visit_unit(self) -> Result<(), E> - where E: Error, + where E: Error { Ok(()) } fn visit_seq(self, _: V) -> Result<(), V::Error> - where V: SeqVisitor, + where V: SeqVisitor { Ok(()) } @@ -103,7 +78,7 @@ impl Visitor for UnitVisitor { impl Deserialize for () { fn deserialize(deserializer: D) -> Result<(), D::Error> - where D: Deserializer, + where D: Deserializer { deserializer.deserialize_unit(UnitVisitor) } @@ -122,13 +97,13 @@ impl Visitor for BoolVisitor { } fn visit_bool(self, v: bool) -> Result - where E: Error, + where E: Error { Ok(v) } fn visit_str(self, s: &str) -> Result - where E: Error, + where E: Error { match s.trim_matches(::utils::Pattern_White_Space) { "true" => Ok(true), @@ -140,7 +115,7 @@ impl Visitor for BoolVisitor { impl Deserialize for bool { fn deserialize(deserializer: D) -> Result - where D: Deserializer, + where D: Deserializer { deserializer.deserialize_bool(BoolVisitor) } @@ -231,14 +206,14 @@ impl Visitor for CharVisitor { #[inline] fn visit_char(self, v: char) -> Result - where E: Error, + where E: Error { Ok(v) } #[inline] fn visit_str(self, v: &str) -> Result - where E: Error, + where E: Error { let mut iter = v.chars(); match (iter.next(), iter.next()) { @@ -251,7 +226,7 @@ impl Visitor for CharVisitor { impl Deserialize for char { #[inline] fn deserialize(deserializer: D) -> Result - where D: Deserializer, + where D: Deserializer { deserializer.deserialize_char(CharVisitor) } @@ -271,25 +246,25 @@ impl Visitor for StringVisitor { } fn visit_str(self, v: &str) -> Result - where E: Error, + where E: Error { Ok(v.to_owned()) } fn visit_string(self, v: String) -> Result - where E: Error, + where E: Error { Ok(v) } fn visit_unit(self) -> Result - where E: Error, + where E: Error { Ok(String::new()) } fn visit_bytes(self, v: &[u8]) -> Result - where E: Error, + where E: Error { match str::from_utf8(v) { Ok(s) => Ok(s.to_owned()), @@ -298,7 +273,7 @@ impl Visitor for StringVisitor { } fn visit_byte_buf(self, v: Vec) -> Result - where E: Error, + where E: Error { match String::from_utf8(v) { Ok(s) => Ok(s), @@ -310,7 +285,7 @@ impl Visitor for StringVisitor { #[cfg(any(feature = "std", feature = "collections"))] impl Deserialize for String { fn deserialize(deserializer: D) -> Result - where D: Deserializer, + where D: Deserializer { deserializer.deserialize_string(StringVisitor) } @@ -322,9 +297,7 @@ struct OptionVisitor { marker: PhantomData, } -impl< - T: Deserialize, -> Visitor for OptionVisitor { +impl Visitor for OptionVisitor { type Value = Option; fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { @@ -333,29 +306,31 @@ impl< #[inline] fn visit_unit(self) -> Result, E> - where E: Error, + where E: Error { Ok(None) } #[inline] fn visit_none(self) -> Result, E> - where E: Error, + where E: Error { Ok(None) } #[inline] fn visit_some(self, deserializer: D) -> Result, D::Error> - where D: Deserializer, + where D: Deserializer { Ok(Some(try!(Deserialize::deserialize(deserializer)))) } } -impl Deserialize for Option where T: Deserialize { +impl Deserialize for Option + where T: Deserialize +{ fn deserialize(deserializer: D) -> Result, D::Error> - where D: Deserializer, + where D: Deserializer { deserializer.deserialize_option(OptionVisitor { marker: PhantomData }) } @@ -377,7 +352,7 @@ impl Visitor for PhantomDataVisitor { #[inline] fn visit_unit(self) -> Result, E> - where E: Error, + where E: Error { Ok(PhantomData) } @@ -385,7 +360,7 @@ impl Visitor for PhantomDataVisitor { impl Deserialize for PhantomData { fn deserialize(deserializer: D) -> Result, D::Error> - where D: Deserializer, + where D: Deserializer { let visitor = PhantomDataVisitor { marker: PhantomData }; deserializer.deserialize_unit_struct("PhantomData", visitor) @@ -524,13 +499,13 @@ struct ArrayVisitor { impl ArrayVisitor { pub fn new() -> Self { - ArrayVisitor { - marker: PhantomData, - } + ArrayVisitor { marker: PhantomData } } } -impl Visitor for ArrayVisitor<[T; 0]> where T: Deserialize { +impl Visitor for ArrayVisitor<[T; 0]> + where T: Deserialize +{ type Value = [T; 0]; fn expecting(&self, formatter: &mut fmt::Formatter) -> fmt::Result { @@ -539,14 +514,14 @@ impl Visitor for ArrayVisitor<[T; 0]> where T: Deserialize { #[inline] fn visit_unit(self) -> Result<[T; 0], E> - where E: Error, + where E: Error { Ok([]) } #[inline] fn visit_seq(self, _: V) -> Result<[T; 0], V::Error> - where V: SeqVisitor, + where V: SeqVisitor { Ok([]) } @@ -556,7 +531,7 @@ impl Deserialize for [T; 0] where T: Deserialize { fn deserialize(deserializer: D) -> Result<[T; 0], D::Error> - where D: Deserializer, + where D: Deserializer { deserializer.deserialize_seq_fixed_size(0, ArrayVisitor::<[T; 0]>::new()) } @@ -798,7 +773,7 @@ map_impl!( #[cfg(feature = "std")] impl Deserialize for net::IpAddr { fn deserialize(deserializer: D) -> Result - where D: Deserializer, + where D: Deserializer { let s = try!(String::deserialize(deserializer)); match s.parse() { @@ -811,7 +786,7 @@ impl Deserialize for net::IpAddr { #[cfg(feature = "std")] impl Deserialize for net::Ipv4Addr { fn deserialize(deserializer: D) -> Result - where D: Deserializer, + where D: Deserializer { let s = try!(String::deserialize(deserializer)); match s.parse() { @@ -824,7 +799,7 @@ impl Deserialize for net::Ipv4Addr { #[cfg(feature = "std")] impl Deserialize for net::Ipv6Addr { fn deserialize(deserializer: D) -> Result - where D: Deserializer, + where D: Deserializer { let s = try!(String::deserialize(deserializer)); match s.parse() { @@ -839,7 +814,7 @@ impl Deserialize for net::Ipv6Addr { #[cfg(feature = "std")] impl Deserialize for net::SocketAddr { fn deserialize(deserializer: D) -> Result - where D: Deserializer, + where D: Deserializer { let s = try!(String::deserialize(deserializer)); match s.parse() { @@ -852,7 +827,7 @@ impl Deserialize for net::SocketAddr { #[cfg(feature = "std")] impl Deserialize for net::SocketAddrV4 { fn deserialize(deserializer: D) -> Result - where D: Deserializer, + where D: Deserializer { let s = try!(String::deserialize(deserializer)); match s.parse() { @@ -865,7 +840,7 @@ impl Deserialize for net::SocketAddrV4 { #[cfg(feature = "std")] impl Deserialize for net::SocketAddrV6 { fn deserialize(deserializer: D) -> Result - where D: Deserializer, + where D: Deserializer { let s = try!(String::deserialize(deserializer)); match s.parse() { @@ -889,13 +864,13 @@ impl Visitor for PathBufVisitor { } fn visit_str(self, v: &str) -> Result - where E: Error, + where E: Error { Ok(From::from(v)) } fn visit_string(self, v: String) -> Result - where E: Error, + where E: Error { Ok(From::from(v)) } @@ -904,7 +879,7 @@ impl Visitor for PathBufVisitor { #[cfg(feature = "std")] impl Deserialize for path::PathBuf { fn deserialize(deserializer: D) -> Result - where D: Deserializer, + where D: Deserializer { deserializer.deserialize_string(PathBufVisitor) } @@ -915,7 +890,7 @@ impl Deserialize for path::PathBuf { #[cfg(any(feature = "std", feature = "alloc"))] impl Deserialize for Box { fn deserialize(deserializer: D) -> Result, D::Error> - where D: Deserializer, + where D: Deserializer { let val = try!(Deserialize::deserialize(deserializer)); Ok(Box::new(val)) @@ -925,7 +900,7 @@ impl Deserialize for Box { #[cfg(any(feature = "std", feature = "collections"))] impl Deserialize for Box<[T]> { fn deserialize(deserializer: D) -> Result, D::Error> - where D: Deserializer, + where D: Deserializer { let v: Vec = try!(Deserialize::deserialize(deserializer)); Ok(v.into_boxed_slice()) @@ -945,7 +920,7 @@ impl Deserialize for Box { #[cfg(any(feature = "std", feature = "alloc"))] impl Deserialize for Arc { fn deserialize(deserializer: D) -> Result, D::Error> - where D: Deserializer, + where D: Deserializer { let val = try!(Deserialize::deserialize(deserializer)); Ok(Arc::new(val)) @@ -955,7 +930,7 @@ impl Deserialize for Arc { #[cfg(any(feature = "std", feature = "alloc"))] impl Deserialize for Rc { fn deserialize(deserializer: D) -> Result, D::Error> - where D: Deserializer, + where D: Deserializer { let val = try!(Deserialize::deserialize(deserializer)); Ok(Rc::new(val)) @@ -963,10 +938,13 @@ impl Deserialize for Rc { } #[cfg(any(feature = "std", feature = "collections"))] -impl<'a, T: ?Sized> Deserialize for Cow<'a, T> where T: ToOwned, T::Owned: Deserialize, { +impl<'a, T: ?Sized> Deserialize for Cow<'a, T> + where T: ToOwned, + T::Owned: Deserialize +{ #[inline] fn deserialize(deserializer: D) -> Result, D::Error> - where D: Deserializer, + where D: Deserializer { let val = try!(Deserialize::deserialize(deserializer)); Ok(Cow::Owned(val)) @@ -986,13 +964,16 @@ impl<'a, T: ?Sized> Deserialize for Cow<'a, T> where T: ToOwned, T::Owned: Deser #[cfg(feature = "std")] impl Deserialize for Duration { fn deserialize(deserializer: D) -> Result - where D: Deserializer, + where D: Deserializer { - enum Field { Secs, Nanos }; + enum Field { + Secs, + Nanos, + }; impl Deserialize for Field { fn deserialize(deserializer: D) -> Result - where D: Deserializer, + where D: Deserializer { struct FieldVisitor; @@ -1004,7 +985,7 @@ impl Deserialize for Duration { } fn visit_str(self, value: &str) -> Result - where E: Error, + where E: Error { match value { "secs" => Ok(Field::Secs), @@ -1014,7 +995,7 @@ impl Deserialize for Duration { } fn visit_bytes(self, value: &[u8]) -> Result - where E: Error, + where E: Error { match value { b"secs" => Ok(Field::Secs), @@ -1041,7 +1022,7 @@ impl Deserialize for Duration { } fn visit_seq(self, mut visitor: V) -> Result - where V: SeqVisitor, + where V: SeqVisitor { let secs: u64 = match try!(visitor.visit()) { Some(value) => value, @@ -1059,7 +1040,7 @@ impl Deserialize for Duration { } fn visit_map(self, mut visitor: V) -> Result - where V: MapVisitor, + where V: MapVisitor { let mut secs: Option = None; let mut nanos: Option = None; @@ -1100,24 +1081,30 @@ impl Deserialize for Duration { #[cfg(feature = "unstable")] #[allow(deprecated)] // num::Zero is deprecated but there is no replacement -impl Deserialize for NonZero where T: Deserialize + PartialEq + Zeroable + Zero { - fn deserialize(deserializer: D) -> Result, D::Error> where D: Deserializer { +impl Deserialize for NonZero + where T: Deserialize + PartialEq + Zeroable + Zero +{ + fn deserialize(deserializer: D) -> Result, D::Error> + where D: Deserializer + { let value = try!(Deserialize::deserialize(deserializer)); if value == Zero::zero() { - return Err(Error::custom("expected a non-zero value")) - } - unsafe { - Ok(NonZero::new(value)) + return Err(Error::custom("expected a non-zero value")); } + unsafe { Ok(NonZero::new(value)) } } } /////////////////////////////////////////////////////////////////////////////// -impl Deserialize for Result where T: Deserialize, E: Deserialize { +impl Deserialize for Result + where T: Deserialize, + E: Deserialize +{ fn deserialize(deserializer: D) -> Result, D::Error> - where D: Deserializer { + where D: Deserializer + { enum Field { Ok, Err, @@ -1137,15 +1124,21 @@ impl Deserialize for Result where T: Deserialize, E: Deserialize { formatter.write_str("`Ok` or `Err`") } - fn visit_u32(self, value: u32) -> Result where E: Error { + fn visit_u32(self, value: u32) -> Result + where E: Error + { match value { 0 => Ok(Field::Ok), 1 => Ok(Field::Err), - _ => Err(Error::invalid_value(Unexpected::Unsigned(value as u64), &self)), + _ => { + Err(Error::invalid_value(Unexpected::Unsigned(value as u64), &self)) + } } } - fn visit_str(self, value: &str) -> Result where E: Error { + fn visit_str(self, value: &str) -> Result + where E: Error + { match value { "Ok" => Ok(Field::Ok), "Err" => Ok(Field::Err), @@ -1153,14 +1146,18 @@ impl Deserialize for Result where T: Deserialize, E: Deserialize { } } - fn visit_bytes(self, value: &[u8]) -> Result where E: Error { + fn visit_bytes(self, value: &[u8]) -> Result + where E: Error + { match value { b"Ok" => Ok(Field::Ok), b"Err" => Ok(Field::Err), _ => { match str::from_utf8(value) { Ok(value) => Err(Error::unknown_variant(value, VARIANTS)), - Err(_) => Err(Error::invalid_value(Unexpected::Bytes(value), &self)), + Err(_) => { + Err(Error::invalid_value(Unexpected::Bytes(value), &self)) + } } } } @@ -1208,7 +1205,7 @@ pub struct IgnoredAny; impl Deserialize for IgnoredAny { #[inline] fn deserialize(deserializer: D) -> Result - where D: Deserializer, + where D: Deserializer { struct IgnoredAnyVisitor; @@ -1241,7 +1238,7 @@ impl Deserialize for IgnoredAny { #[inline] fn visit_str(self, _: &str) -> Result - where E: Error, + where E: Error { Ok(IgnoredAny) } @@ -1253,14 +1250,14 @@ impl Deserialize for IgnoredAny { #[inline] fn visit_some(self, _: D) -> Result - where D: Deserializer, + where D: Deserializer { Ok(IgnoredAny) } #[inline] fn visit_newtype_struct(self, _: D) -> Result - where D: Deserializer, + where D: Deserializer { Ok(IgnoredAny) } @@ -1272,7 +1269,7 @@ impl Deserialize for IgnoredAny { #[inline] fn visit_seq(self, mut visitor: V) -> Result - where V: SeqVisitor, + where V: SeqVisitor { while let Some(_) = try!(visitor.visit::()) { // Gobble @@ -1282,7 +1279,7 @@ impl Deserialize for IgnoredAny { #[inline] fn visit_map(self, mut visitor: V) -> Result - where V: MapVisitor, + where V: MapVisitor { while let Some((_, _)) = try!(visitor.visit::()) { // Gobble @@ -1292,7 +1289,7 @@ impl Deserialize for IgnoredAny { #[inline] fn visit_bytes(self, _: &[u8]) -> Result - where E: Error, + where E: Error { Ok(IgnoredAny) } diff --git a/serde/src/de/mod.rs b/serde/src/de/mod.rs index f01988bb..9ae0ba0c 100644 --- a/serde/src/de/mod.rs +++ b/serde/src/de/mod.rs @@ -181,7 +181,10 @@ pub trait Error: Sized + error::Error { write!(formatter, "invalid type: {}, expected {}", self.unexp, self.exp) } } - Error::custom(InvalidType { unexp: unexp, exp: exp }) + Error::custom(InvalidType { + unexp: unexp, + exp: exp, + }) } /// Raised when a `Deserialize` receives a value of the right type but that @@ -207,7 +210,10 @@ pub trait Error: Sized + error::Error { write!(formatter, "invalid value: {}, expected {}", self.unexp, self.exp) } } - Error::custom(InvalidValue { unexp: unexp, exp: exp }) + Error::custom(InvalidValue { + unexp: unexp, + exp: exp, + }) } /// Raised when deserializing a sequence or map and the input data contains @@ -229,7 +235,10 @@ pub trait Error: Sized + error::Error { write!(formatter, "invalid length {}, expected {}", self.len, self.exp) } } - Error::custom(InvalidLength { len: len, exp: exp }) + Error::custom(InvalidLength { + len: len, + exp: exp, + }) } /// Raised when a `Deserialize` enum type received a variant with an @@ -253,7 +262,10 @@ pub trait Error: Sized + error::Error { } } } - Error::custom(UnknownVariant { variant: variant, expected: expected }) + Error::custom(UnknownVariant { + variant: variant, + expected: expected, + }) } /// Raised when a `Deserialize` struct type received a field with an @@ -277,7 +289,10 @@ pub trait Error: Sized + error::Error { } } } - Error::custom(UnknownField { field: field, expected: expected }) + Error::custom(UnknownField { + field: field, + expected: expected, + }) } /// Raised when a `Deserialize` struct type expected to receive a required @@ -470,7 +485,9 @@ pub trait Expected { fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result; } -impl Expected for T where T: Visitor { +impl Expected for T + where T: Visitor +{ fn fmt(&self, formatter: &mut fmt::Formatter) -> fmt::Result { self.expecting(formatter) } @@ -521,8 +538,7 @@ pub trait Deserialize: Sized { /// manual for more information about how to implement this method. /// /// [impl-deserialize]: https://serde.rs/impl-deserialize.html - fn deserialize(deserializer: D) -> Result - where D: Deserializer; + fn deserialize(deserializer: D) -> Result where D: Deserializer; } /// `DeserializeSeed` is the stateful form of the `Deserialize` trait. If you @@ -670,8 +686,7 @@ pub trait DeserializeSeed: Sized { /// Equivalent to the more common `Deserialize::deserialize` method, except /// with some initial piece of data (the seed) passed in. - fn deserialize(self, deserializer: D) -> Result - where D: Deserializer; + fn deserialize(self, deserializer: D) -> Result where D: Deserializer; } impl DeserializeSeed for PhantomData @@ -784,56 +799,43 @@ pub trait Deserializer: Sized { /// `Deserializer::deserialize` means your data type will be able to /// deserialize from self-describing formats only, ruling out Bincode and /// many others. - fn deserialize(self, visitor: V) -> Result - where V: Visitor; + fn deserialize(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a `bool` value. - fn deserialize_bool(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_bool(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a `u8` value. - fn deserialize_u8(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_u8(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a `u16` value. - fn deserialize_u16(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_u16(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a `u32` value. - fn deserialize_u32(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_u32(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a `u64` value. - fn deserialize_u64(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_u64(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting an `i8` value. - fn deserialize_i8(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_i8(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting an `i16` value. - fn deserialize_i16(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_i16(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting an `i32` value. - fn deserialize_i32(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_i32(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting an `i64` value. - fn deserialize_i64(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_i64(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a `f32` value. - fn deserialize_f32(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_f32(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a `f64` value. - fn deserialize_f64(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_f64(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a `char` value. - fn deserialize_char(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_char(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a string value and does /// not benefit from taking ownership of buffered data owned by the @@ -842,8 +844,7 @@ pub trait Deserializer: Sized { /// If the `Visitor` would benefit from taking ownership of `String` data, /// indiciate this to the `Deserializer` by using `deserialize_string` /// instead. - fn deserialize_str(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_str(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a string value and would /// benefit from taking ownership of buffered data owned by the @@ -852,8 +853,7 @@ pub trait Deserializer: Sized { /// If the `Visitor` would not benefit from taking ownership of `String` /// data, indicate that to the `Deserializer` by using `deserialize_str` /// instead. - fn deserialize_string(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_string(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a byte array and does not /// benefit from taking ownership of buffered data owned by the @@ -862,8 +862,7 @@ pub trait Deserializer: Sized { /// If the `Visitor` would benefit from taking ownership of `Vec` data, /// indicate this to the `Deserializer` by using `deserialize_byte_buf` /// instead. - fn deserialize_bytes(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_bytes(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a byte array and would /// benefit from taking ownership of buffered data owned by the @@ -872,44 +871,43 @@ pub trait Deserializer: Sized { /// If the `Visitor` would not benefit from taking ownership of `Vec` /// data, indicate that to the `Deserializer` by using `deserialize_bytes` /// instead. - fn deserialize_byte_buf(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_byte_buf(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting an optional value. /// /// This allows deserializers that encode an optional value as a nullable /// value to convert the null value into `None` and a regular value into /// `Some(value)`. - fn deserialize_option(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_option(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a unit value. - fn deserialize_unit(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_unit(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a unit struct with a /// particular name. fn deserialize_unit_struct(self, name: &'static str, - visitor: V) -> Result + visitor: V) + -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a newtype struct with a /// particular name. fn deserialize_newtype_struct(self, name: &'static str, - visitor: V) -> Result + visitor: V) + -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a sequence of values. - fn deserialize_seq(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_seq(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a sequence of values and /// knows how many values there are without looking at the serialized data. fn deserialize_seq_fixed_size(self, len: usize, - visitor: V) -> Result + visitor: V) + -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a tuple value with a @@ -922,19 +920,20 @@ pub trait Deserializer: Sized { fn deserialize_tuple_struct(self, name: &'static str, len: usize, - visitor: V) -> Result + visitor: V) + -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a map of key-value pairs. - fn deserialize_map(self, visitor: V) -> Result - where V: Visitor; + fn deserialize_map(self, visitor: V) -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting a struct with a particular /// name and fields. fn deserialize_struct(self, name: &'static str, fields: &'static [&'static str], - visitor: V) -> Result + visitor: V) + -> Result where V: Visitor; /// Hint that the `Deserialize` type is expecting the name of a struct @@ -947,7 +946,8 @@ pub trait Deserializer: Sized { fn deserialize_enum(self, name: &'static str, variants: &'static [&'static str], - visitor: V) -> Result + visitor: V) + -> Result where V: Visitor; /// Hint that the `Deserialize` type needs to deserialize a value whose type @@ -1016,77 +1016,77 @@ pub trait Visitor: Sized { /// Deserialize a `bool` into a `Value`. fn visit_bool(self, v: bool) -> Result - where E: Error, + where E: Error { Err(Error::invalid_type(Unexpected::Bool(v), &self)) } /// Deserialize an `i8` into a `Value`. fn visit_i8(self, v: i8) -> Result - where E: Error, + where E: Error { self.visit_i64(v as i64) } /// Deserialize an `i16` into a `Value`. fn visit_i16(self, v: i16) -> Result - where E: Error, + where E: Error { self.visit_i64(v as i64) } /// Deserialize an `i32` into a `Value`. fn visit_i32(self, v: i32) -> Result - where E: Error, + where E: Error { self.visit_i64(v as i64) } /// Deserialize an `i64` into a `Value`. fn visit_i64(self, v: i64) -> Result - where E: Error, + where E: Error { Err(Error::invalid_type(Unexpected::Signed(v), &self)) } /// Deserialize a `u8` into a `Value`. fn visit_u8(self, v: u8) -> Result - where E: Error, + where E: Error { self.visit_u64(v as u64) } /// Deserialize a `u16` into a `Value`. fn visit_u16(self, v: u16) -> Result - where E: Error, + where E: Error { self.visit_u64(v as u64) } /// Deserialize a `u32` into a `Value`. fn visit_u32(self, v: u32) -> Result - where E: Error, + where E: Error { self.visit_u64(v as u64) } /// Deserialize a `u64` into a `Value`. fn visit_u64(self, v: u64) -> Result - where E: Error, + where E: Error { Err(Error::invalid_type(Unexpected::Unsigned(v), &self)) } /// Deserialize a `f32` into a `Value`. fn visit_f32(self, v: f32) -> Result - where E: Error, + where E: Error { self.visit_f64(v as f64) } /// Deserialize a `f64` into a `Value`. fn visit_f64(self, v: f64) -> Result - where E: Error, + where E: Error { Err(Error::invalid_type(Unexpected::Float(v), &self)) } @@ -1094,7 +1094,7 @@ pub trait Visitor: Sized { /// Deserialize a `char` into a `Value`. #[inline] fn visit_char(self, v: char) -> Result - where E: Error, + where E: Error { self.visit_str(::utils::encode_utf8(v).as_str()) } @@ -1110,7 +1110,7 @@ pub trait Visitor: Sized { /// It is never correct to implement `visit_string` without implementing /// `visit_str`. Implement neither, both, or just `visit_str`. fn visit_str(self, v: &str) -> Result - where E: Error, + where E: Error { Err(Error::invalid_type(Unexpected::Str(v), &self)) } @@ -1132,28 +1132,28 @@ pub trait Visitor: Sized { #[inline] #[cfg(any(feature = "std", feature = "collections"))] fn visit_string(self, v: String) -> Result - where E: Error, + where E: Error { self.visit_str(&v) } /// Deserialize a `()` into a `Value`. fn visit_unit(self) -> Result - where E: Error, + where E: Error { Err(Error::invalid_type(Unexpected::Unit, &self)) } /// Deserialize an absent optional `Value`. fn visit_none(self) -> Result - where E: Error, + where E: Error { Err(Error::invalid_type(Unexpected::Option, &self)) } /// Deserialize a present optional `Value`. fn visit_some(self, deserializer: D) -> Result - where D: Deserializer, + where D: Deserializer { let _ = deserializer; Err(Error::invalid_type(Unexpected::Option, &self)) @@ -1161,7 +1161,7 @@ pub trait Visitor: Sized { /// Deserialize `Value` as a newtype struct. fn visit_newtype_struct(self, deserializer: D) -> Result - where D: Deserializer, + where D: Deserializer { let _ = deserializer; Err(Error::invalid_type(Unexpected::NewtypeStruct, &self)) @@ -1169,7 +1169,7 @@ pub trait Visitor: Sized { /// Deserialize `Value` as a sequence of elements. fn visit_seq(self, visitor: V) -> Result - where V: SeqVisitor, + where V: SeqVisitor { let _ = visitor; Err(Error::invalid_type(Unexpected::Seq, &self)) @@ -1177,7 +1177,7 @@ pub trait Visitor: Sized { /// Deserialize `Value` as a key-value map. fn visit_map(self, visitor: V) -> Result - where V: MapVisitor, + where V: MapVisitor { let _ = visitor; Err(Error::invalid_type(Unexpected::Map, &self)) @@ -1185,7 +1185,7 @@ pub trait Visitor: Sized { /// Deserialize `Value` as an enum. fn visit_enum(self, visitor: V) -> Result - where V: EnumVisitor, + where V: EnumVisitor { let _ = visitor; Err(Error::invalid_type(Unexpected::Enum, &self)) @@ -1202,7 +1202,7 @@ pub trait Visitor: Sized { /// It is never correct to implement `visit_byte_buf` without implementing /// `visit_bytes`. Implement neither, both, or just `visit_bytes`. fn visit_bytes(self, v: &[u8]) -> Result - where E: Error, + where E: Error { let _ = v; Err(Error::invalid_type(Unexpected::Bytes(v), &self)) @@ -1225,7 +1225,7 @@ pub trait Visitor: Sized { /// `Vec`. #[cfg(any(feature = "std", feature = "collections"))] fn visit_byte_buf(self, v: Vec) -> Result - where E: Error, + where E: Error { self.visit_bytes(&v) } @@ -1269,7 +1269,9 @@ pub trait SeqVisitor { } } -impl<'a, V> SeqVisitor for &'a mut V where V: SeqVisitor { +impl<'a, V> SeqVisitor for &'a mut V + where V: SeqVisitor +{ type Error = V::Error; #[inline] @@ -1326,7 +1328,10 @@ pub trait MapVisitor { /// `Deserialize` implementations should typically use `MapVisitor::visit` /// instead. #[inline] - fn visit_seed(&mut self, kseed: K, vseed: V) -> Result, Self::Error> + fn visit_seed(&mut self, + kseed: K, + vseed: V) + -> Result, Self::Error> where K: DeserializeSeed, V: DeserializeSeed { @@ -1335,7 +1340,7 @@ pub trait MapVisitor { let value = try!(self.visit_value_seed(vseed)); Ok(Some((key, value))) } - None => Ok(None) + None => Ok(None), } } @@ -1370,7 +1375,7 @@ pub trait MapVisitor { #[inline] fn visit(&mut self) -> Result, Self::Error> where K: Deserialize, - V: Deserialize, + V: Deserialize { self.visit_seed(PhantomData, PhantomData) } @@ -1382,7 +1387,9 @@ pub trait MapVisitor { } } -impl<'a, V_> MapVisitor for &'a mut V_ where V_: MapVisitor { +impl<'a, V_> MapVisitor for &'a mut V_ + where V_: MapVisitor +{ type Error = V_::Error; #[inline] @@ -1400,7 +1407,10 @@ impl<'a, V_> MapVisitor for &'a mut V_ where V_: MapVisitor { } #[inline] - fn visit_seed(&mut self, kseed: K, vseed: V) -> Result, Self::Error> + fn visit_seed(&mut self, + kseed: K, + vseed: V) + -> Result, Self::Error> where K: DeserializeSeed, V: DeserializeSeed { @@ -1410,7 +1420,7 @@ impl<'a, V_> MapVisitor for &'a mut V_ where V_: MapVisitor { #[inline] fn visit(&mut self) -> Result, V_::Error> where K: Deserialize, - V: Deserialize, + V: Deserialize { (**self).visit() } @@ -1446,7 +1456,7 @@ pub trait EnumVisitor: Sized { type Error: Error; /// The `Visitor` that will be used to deserialize the content of the enum /// variant. - type Variant: VariantVisitor; + type Variant: VariantVisitor; /// `visit_variant` is called to identify which variant to deserialize. /// @@ -1539,9 +1549,7 @@ pub trait VariantVisitor: Sized { /// Err(Error::invalid_type(unexp, &"tuple variant")) /// } /// ``` - fn visit_tuple(self, - len: usize, - visitor: V) -> Result + fn visit_tuple(self, len: usize, visitor: V) -> Result where V: Visitor; /// Called when deserializing a struct-like variant. @@ -1564,7 +1572,8 @@ pub trait VariantVisitor: Sized { /// ``` fn visit_struct(self, fields: &'static [&'static str], - visitor: V) -> Result + visitor: V) + -> Result where V: Visitor; } diff --git a/serde/src/de/private.rs b/serde/src/de/private.rs index 566c4b11..8ef62231 100644 --- a/serde/src/de/private.rs +++ b/serde/src/de/private.rs @@ -3,14 +3,8 @@ use core::marker::PhantomData; use de::{Deserialize, Deserializer, Error, Visitor}; #[cfg(any(feature = "std", feature = "collections"))] -pub use de::content::{ - Content, - ContentRefDeserializer, - ContentDeserializer, - TaggedContentVisitor, - InternallyTaggedUnitVisitor, - UntaggedUnitVisitor, -}; +pub use de::content::{Content, ContentRefDeserializer, ContentDeserializer, TaggedContentVisitor, + InternallyTaggedUnitVisitor, UntaggedUnitVisitor}; /// If the missing field is of type `Option` then treat is as `None`, /// otherwise it is an error. diff --git a/serde/src/de/value.rs b/serde/src/de/value.rs index 85d15267..264cdc79 100644 --- a/serde/src/de/value.rs +++ b/serde/src/de/value.rs @@ -1,31 +1,15 @@ //! This module supports deserializing from primitives with the `ValueDeserializer` trait. #[cfg(feature = "std")] -use std::collections::{ - BTreeMap, - BTreeSet, - HashMap, - HashSet, - btree_map, - btree_set, - hash_map, - hash_set, -}; +use std::collections::{BTreeMap, BTreeSet, HashMap, HashSet, btree_map, btree_set, hash_map, + hash_set}; #[cfg(feature = "std")] use std::borrow::Cow; #[cfg(feature = "std")] use std::vec; #[cfg(all(feature = "collections", not(feature = "std")))] -use collections::{ - BTreeMap, - BTreeSet, - Vec, - String, - btree_map, - btree_set, - vec, -}; +use collections::{BTreeMap, BTreeSet, Vec, String, btree_map, btree_set, vec}; #[cfg(all(feature = "collections", not(feature = "std")))] use collections::borrow::Cow; #[cfg(all(feature = "collections", not(feature = "std")))] @@ -41,7 +25,7 @@ use std::error; use error; use core::fmt::{self, Display}; -use core::iter::{self, Iterator}; +use core::iter::{self, Iterator}; use core::marker::PhantomData; use de::{self, Expected, SeqVisitor}; @@ -63,16 +47,12 @@ type ErrorImpl = (); impl de::Error for Error { #[cfg(any(feature = "std", feature = "collections"))] fn custom(msg: T) -> Self { - Error { - err: msg.to_string().into_boxed_str(), - } + Error { err: msg.to_string().into_boxed_str() } } #[cfg(not(any(feature = "std", feature = "collections")))] fn custom(_msg: T) -> Self { - Error { - err: (), - } + Error { err: () } } } @@ -105,7 +85,7 @@ impl error::Error for Error { /// This trait converts primitive types into a deserializer. pub trait ValueDeserializer { /// The actual deserializer type. - type Deserializer: de::Deserializer; + type Deserializer: de::Deserializer; /// Convert this value into a deserializer. fn into_deserializer(self) -> Self::Deserializer; @@ -114,14 +94,12 @@ pub trait ValueDeserializer { /////////////////////////////////////////////////////////////////////////////// impl ValueDeserializer for () - where E: de::Error, + where E: de::Error { type Deserializer = UnitDeserializer; fn into_deserializer(self) -> UnitDeserializer { - UnitDeserializer { - marker: PhantomData, - } + UnitDeserializer { marker: PhantomData } } } @@ -142,13 +120,13 @@ impl de::Deserializer for UnitDeserializer } fn deserialize(self, visitor: V) -> Result - where V: de::Visitor, + where V: de::Visitor { visitor.visit_unit() } fn deserialize_option(self, visitor: V) -> Result - where V: de::Visitor, + where V: de::Visitor { visitor.visit_none() } @@ -221,7 +199,7 @@ pub struct StrDeserializer<'a, E> { } impl<'a, E> ValueDeserializer for &'a str - where E: de::Error, + where E: de::Error { type Deserializer = StrDeserializer<'a, E>; @@ -234,21 +212,22 @@ impl<'a, E> ValueDeserializer for &'a str } impl<'a, E> de::Deserializer for StrDeserializer<'a, E> - where E: de::Error, + where E: de::Error { type Error = E; fn deserialize(self, visitor: V) -> Result - where V: de::Visitor, + where V: de::Visitor { visitor.visit_str(self.value) } fn deserialize_enum(self, - _name: &str, - _variants: &'static [&'static str], - visitor: V) -> Result - where V: de::Visitor, + _name: &str, + _variants: &'static [&'static str], + visitor: V) + -> Result + where V: de::Visitor { visitor.visit_enum(self) } @@ -261,13 +240,13 @@ impl<'a, E> de::Deserializer for StrDeserializer<'a, E> } impl<'a, E> de::EnumVisitor for StrDeserializer<'a, E> - where E: de::Error, + where E: de::Error { type Error = E; type Variant = private::UnitOnly; fn visit_variant_seed(self, seed: T) -> Result<(T::Value, Self::Variant), Self::Error> - where T: de::DeserializeSeed, + where T: de::DeserializeSeed { seed.deserialize(self).map(private::unit_only) } @@ -284,7 +263,7 @@ pub struct StringDeserializer { #[cfg(any(feature = "std", feature = "collections"))] impl ValueDeserializer for String - where E: de::Error, + where E: de::Error { type Deserializer = StringDeserializer; @@ -298,21 +277,22 @@ impl ValueDeserializer for String #[cfg(any(feature = "std", feature = "collections"))] impl de::Deserializer for StringDeserializer - where E: de::Error, + where E: de::Error { type Error = E; fn deserialize(self, visitor: V) -> Result - where V: de::Visitor, + where V: de::Visitor { visitor.visit_string(self.value) } fn deserialize_enum(self, - _name: &str, - _variants: &'static [&'static str], - visitor: V) -> Result - where V: de::Visitor, + _name: &str, + _variants: &'static [&'static str], + visitor: V) + -> Result + where V: de::Visitor { visitor.visit_enum(self) } @@ -326,13 +306,13 @@ impl de::Deserializer for StringDeserializer #[cfg(any(feature = "std", feature = "collections"))] impl<'a, E> de::EnumVisitor for StringDeserializer - where E: de::Error, + where E: de::Error { type Error = E; type Variant = private::UnitOnly; fn visit_variant_seed(self, seed: T) -> Result<(T::Value, Self::Variant), Self::Error> - where T: de::DeserializeSeed, + where T: de::DeserializeSeed { seed.deserialize(self).map(private::unit_only) } @@ -349,7 +329,7 @@ pub struct CowStrDeserializer<'a, E> { #[cfg(any(feature = "std", feature = "collections"))] impl<'a, E> ValueDeserializer for Cow<'a, str> - where E: de::Error, + where E: de::Error { type Deserializer = CowStrDeserializer<'a, E>; @@ -363,12 +343,12 @@ impl<'a, E> ValueDeserializer for Cow<'a, str> #[cfg(any(feature = "std", feature = "collections"))] impl<'a, E> de::Deserializer for CowStrDeserializer<'a, E> - where E: de::Error, + where E: de::Error { type Error = E; fn deserialize(self, visitor: V) -> Result - where V: de::Visitor, + where V: de::Visitor { match self.value { Cow::Borrowed(string) => visitor.visit_str(string), @@ -377,10 +357,11 @@ impl<'a, E> de::Deserializer for CowStrDeserializer<'a, E> } fn deserialize_enum(self, - _name: &str, - _variants: &'static [&'static str], - visitor: V) -> Result - where V: de::Visitor, + _name: &str, + _variants: &'static [&'static str], + visitor: V) + -> Result + where V: de::Visitor { visitor.visit_enum(self) } @@ -394,13 +375,13 @@ impl<'a, E> de::Deserializer for CowStrDeserializer<'a, E> #[cfg(any(feature = "std", feature = "collections"))] impl<'a, E> de::EnumVisitor for CowStrDeserializer<'a, E> - where E: de::Error, + where E: de::Error { type Error = E; type Variant = private::UnitOnly; fn visit_variant_seed(self, seed: T) -> Result<(T::Value, Self::Variant), Self::Error> - where T: de::DeserializeSeed, + where T: de::DeserializeSeed { seed.deserialize(self).map(private::unit_only) } @@ -417,7 +398,7 @@ pub struct SeqDeserializer { impl SeqDeserializer where I: Iterator, - E: de::Error, + E: de::Error { /// Construct a new `SeqDeserializer`. pub fn new(iter: I) -> Self { @@ -446,14 +427,14 @@ impl SeqDeserializer } impl de::Deserializer for SeqDeserializer - where I: Iterator, + where I: Iterator, T: ValueDeserializer, - E: de::Error, + E: de::Error { type Error = E; fn deserialize(mut self, visitor: V) -> Result - where V: de::Visitor, + where V: de::Visitor { let v = try!(visitor.visit_seq(&mut self)); try!(self.end()); @@ -468,9 +449,9 @@ impl de::Deserializer for SeqDeserializer } impl de::SeqVisitor for SeqDeserializer - where I: Iterator, + where I: Iterator, T: ValueDeserializer, - E: de::Error, + E: de::Error { type Error = E; @@ -508,7 +489,7 @@ impl Expected for ExpectedInSeq { #[cfg(any(feature = "std", feature = "collections"))] impl ValueDeserializer for Vec where T: ValueDeserializer, - E: de::Error, + E: de::Error { type Deserializer = SeqDeserializer, E>; @@ -520,7 +501,7 @@ impl ValueDeserializer for Vec #[cfg(any(feature = "std", feature = "collections"))] impl ValueDeserializer for BTreeSet where T: ValueDeserializer + Eq + Ord, - E: de::Error, + E: de::Error { type Deserializer = SeqDeserializer, E>; @@ -532,7 +513,7 @@ impl ValueDeserializer for BTreeSet #[cfg(feature = "std")] impl ValueDeserializer for HashSet where T: ValueDeserializer + Eq + Hash, - E: de::Error, + E: de::Error { type Deserializer = SeqDeserializer, E>; @@ -551,20 +532,20 @@ pub struct SeqVisitorDeserializer { impl SeqVisitorDeserializer where V_: de::SeqVisitor, - E: de::Error, + E: de::Error { /// Construct a new `SeqVisitorDeserializer`. pub fn new(visitor: V_) -> Self { - SeqVisitorDeserializer{ + SeqVisitorDeserializer { visitor: visitor, - marker: PhantomData + marker: PhantomData, } } } impl de::Deserializer for SeqVisitorDeserializer where V_: de::SeqVisitor, - E: de::Error, + E: de::Error { type Error = E; @@ -587,7 +568,7 @@ pub struct MapDeserializer I::Item: private::Pair, ::First: ValueDeserializer, ::Second: ValueDeserializer, - E: de::Error, + E: de::Error { iter: iter::Fuse, value: Option<::Second>, @@ -600,7 +581,7 @@ impl MapDeserializer I::Item: private::Pair, ::First: ValueDeserializer, ::Second: ValueDeserializer, - E: de::Error, + E: de::Error { /// Construct a new `MapDeserializer`. pub fn new(iter: I) -> Self { @@ -628,7 +609,9 @@ impl MapDeserializer } } - fn next_pair(&mut self) -> Option<(::First, ::Second)> { + fn next_pair + (&mut self) + -> Option<(::First, ::Second)> { match self.iter.next() { Some(kv) => { self.count += 1; @@ -644,12 +627,12 @@ impl de::Deserializer for MapDeserializer I::Item: private::Pair, ::First: ValueDeserializer, ::Second: ValueDeserializer, - E: de::Error, + E: de::Error { type Error = E; fn deserialize(mut self, visitor: V_) -> Result - where V_: de::Visitor, + where V_: de::Visitor { let value = try!(visitor.visit_map(&mut self)); try!(self.end()); @@ -657,15 +640,18 @@ impl de::Deserializer for MapDeserializer } fn deserialize_seq(mut self, visitor: V_) -> Result - where V_: de::Visitor, + where V_: de::Visitor { let value = try!(visitor.visit_seq(&mut self)); try!(self.end()); Ok(value) } - fn deserialize_seq_fixed_size(self, _len: usize, visitor: V_) -> Result - where V_: de::Visitor, + fn deserialize_seq_fixed_size(self, + _len: usize, + visitor: V_) + -> Result + where V_: de::Visitor { self.deserialize_seq(visitor) } @@ -682,12 +668,12 @@ impl de::MapVisitor for MapDeserializer I::Item: private::Pair, ::First: ValueDeserializer, ::Second: ValueDeserializer, - E: de::Error, + E: de::Error { type Error = E; fn visit_key_seed(&mut self, seed: T) -> Result, Self::Error> - where T: de::DeserializeSeed, + where T: de::DeserializeSeed { match self.next_pair() { Some((key, value)) => { @@ -699,7 +685,7 @@ impl de::MapVisitor for MapDeserializer } fn visit_value_seed(&mut self, seed: T) -> Result - where T: de::DeserializeSeed, + where T: de::DeserializeSeed { let value = self.value.take(); // Panic because this indicates a bug in the program rather than an @@ -708,7 +694,10 @@ impl de::MapVisitor for MapDeserializer seed.deserialize(value.into_deserializer()) } - fn visit_seed(&mut self, kseed: TK, vseed: TV) -> Result, Self::Error> + fn visit_seed(&mut self, + kseed: TK, + vseed: TV) + -> Result, Self::Error> where TK: de::DeserializeSeed, TV: de::DeserializeSeed { @@ -718,7 +707,7 @@ impl de::MapVisitor for MapDeserializer let value = try!(vseed.deserialize(value.into_deserializer())); Ok(Some((key, value))) } - None => Ok(None) + None => Ok(None), } } @@ -732,12 +721,12 @@ impl de::SeqVisitor for MapDeserializer I::Item: private::Pair, ::First: ValueDeserializer, ::Second: ValueDeserializer, - E: de::Error, + E: de::Error { type Error = E; fn visit_seed(&mut self, seed: T) -> Result, Self::Error> - where T: de::DeserializeSeed, + where T: de::DeserializeSeed { match self.next_pair() { Some((k, v)) => { @@ -771,13 +760,13 @@ impl de::Deserializer for PairDeserializer } fn deserialize(self, visitor: V) -> Result - where V: de::Visitor, + where V: de::Visitor { self.deserialize_seq(visitor) } fn deserialize_seq(self, visitor: V) -> Result - where V: de::Visitor, + where V: de::Visitor { let mut pair_visitor = PairVisitor(Some(self.0), Some(self.1), PhantomData); let pair = try!(visitor.visit_seq(&mut pair_visitor)); @@ -792,7 +781,7 @@ impl de::Deserializer for PairDeserializer } fn deserialize_seq_fixed_size(self, len: usize, visitor: V) -> Result - where V: de::Visitor, + where V: de::Visitor { if len == 2 { self.deserialize_seq(visitor) @@ -809,12 +798,12 @@ struct PairVisitor(Option, Option, PhantomData); impl de::SeqVisitor for PairVisitor where A: ValueDeserializer, B: ValueDeserializer, - E: de::Error, + E: de::Error { type Error = E; fn visit_seed(&mut self, seed: T) -> Result, Self::Error> - where T: de::DeserializeSeed, + where T: de::DeserializeSeed { if let Some(k) = self.0.take() { seed.deserialize(k.into_deserializer()).map(Some) @@ -855,7 +844,7 @@ impl Expected for ExpectedInMap { impl ValueDeserializer for BTreeMap where K: ValueDeserializer + Eq + Ord, V: ValueDeserializer, - E: de::Error, + E: de::Error { type Deserializer = MapDeserializer, E>; @@ -868,7 +857,7 @@ impl ValueDeserializer for BTreeMap impl ValueDeserializer for HashMap where K: ValueDeserializer + Eq + Hash, V: ValueDeserializer, - E: de::Error, + E: de::Error { type Deserializer = MapDeserializer, E>; @@ -887,20 +876,20 @@ pub struct MapVisitorDeserializer { impl MapVisitorDeserializer where V_: de::MapVisitor, - E: de::Error, + E: de::Error { /// Construct a new `MapVisitorDeserializer`. pub fn new(visitor: V_) -> Self { - MapVisitorDeserializer{ + MapVisitorDeserializer { visitor: visitor, - marker: PhantomData + marker: PhantomData, } } } impl de::Deserializer for MapVisitorDeserializer where V_: de::MapVisitor, - E: de::Error, + E: de::Error { type Error = E; @@ -918,7 +907,7 @@ impl de::Deserializer for MapVisitorDeserializer /////////////////////////////////////////////////////////////////////////////// impl<'a, E> ValueDeserializer for bytes::Bytes<'a> - where E: de::Error, + where E: de::Error { type Deserializer = BytesDeserializer<'a, E>; @@ -942,7 +931,7 @@ impl<'a, E> de::Deserializer for BytesDeserializer<'a, E> type Error = E; fn deserialize(self, visitor: V) -> Result - where V: de::Visitor, + where V: de::Visitor { visitor.visit_bytes(self.value) } @@ -958,7 +947,7 @@ impl<'a, E> de::Deserializer for BytesDeserializer<'a, E> #[cfg(any(feature = "std", feature = "collections"))] impl ValueDeserializer for bytes::ByteBuf - where E: de::Error, + where E: de::Error { type Deserializer = ByteBufDeserializer; @@ -979,12 +968,12 @@ pub struct ByteBufDeserializer { #[cfg(any(feature = "std", feature = "collections"))] impl de::Deserializer for ByteBufDeserializer - where E: de::Error, + where E: de::Error { type Error = E; fn deserialize(self, visitor: V) -> Result - where V: de::Visitor, + where V: de::Visitor { visitor.visit_byte_buf(self.value) } @@ -1020,14 +1009,12 @@ mod private { } fn visit_newtype_seed(self, _seed: T) -> Result - where T: de::DeserializeSeed, + where T: de::DeserializeSeed { Err(de::Error::invalid_type(Unexpected::UnitVariant, &"newtype variant")) } - fn visit_tuple(self, - _len: usize, - _visitor: V) -> Result + fn visit_tuple(self, _len: usize, _visitor: V) -> Result where V: de::Visitor { Err(de::Error::invalid_type(Unexpected::UnitVariant, &"tuple variant")) @@ -1035,7 +1022,8 @@ mod private { fn visit_struct(self, _fields: &'static [&'static str], - _visitor: V) -> Result + _visitor: V) + -> Result where V: de::Visitor { Err(de::Error::invalid_type(Unexpected::UnitVariant, &"struct variant")) @@ -1053,6 +1041,8 @@ mod private { impl Pair for (A, B) { type First = A; type Second = B; - fn split(self) -> (A, B) { self } + fn split(self) -> (A, B) { + self + } } } diff --git a/serde/src/error.rs b/serde/src/error.rs index 6c411f84..fe91c28f 100644 --- a/serde/src/error.rs +++ b/serde/src/error.rs @@ -11,5 +11,7 @@ pub trait Error: Debug + Display { fn description(&self) -> &str; /// The lower-level cause of this error, if any. - fn cause(&self) -> Option<&Error> { None } + fn cause(&self) -> Option<&Error> { + None + } } diff --git a/serde/src/iter.rs b/serde/src/iter.rs index 24a6bf30..784fe9bc 100644 --- a/serde/src/iter.rs +++ b/serde/src/iter.rs @@ -4,13 +4,13 @@ use std::io; use std::iter::Peekable; /// Iterator over a byte stream that tracks the current position's line and column. -pub struct LineColIterator>> { +pub struct LineColIterator>> { iter: Iter, line: usize, col: usize, } -impl>> LineColIterator { +impl>> LineColIterator { /// Construct a new `LineColIterator`. pub fn new(iter: Iter) -> LineColIterator { LineColIterator { @@ -21,27 +21,39 @@ impl>> LineColIterator { } /// Report the current line inside the iterator. - pub fn line(&self) -> usize { self.line } + pub fn line(&self) -> usize { + self.line + } /// Report the current column inside the iterator. - pub fn col(&self) -> usize { self.col } + pub fn col(&self) -> usize { + self.col + } /// Gets a reference to the underlying iterator. - pub fn get_ref(&self) -> &Iter { &self.iter } + pub fn get_ref(&self) -> &Iter { + &self.iter + } /// Gets a mutable reference to the underlying iterator. - pub fn get_mut(&mut self) -> &mut Iter { &mut self.iter } + pub fn get_mut(&mut self) -> &mut Iter { + &mut self.iter + } /// Unwraps this `LineColIterator`, returning the underlying iterator. - pub fn into_inner(self) -> Iter { self.iter } + pub fn into_inner(self) -> Iter { + self.iter + } } -impl>> LineColIterator> { +impl>> LineColIterator> { /// peeks at the next value - pub fn peek(&mut self) -> Option<&io::Result> { self.iter.peek() } + pub fn peek(&mut self) -> Option<&io::Result> { + self.iter.peek() + } } -impl>> Iterator for LineColIterator { +impl>> Iterator for LineColIterator { type Item = io::Result; fn next(&mut self) -> Option> { match self.iter.next() { @@ -50,11 +62,11 @@ impl>> Iterator for LineColIterator { self.line += 1; self.col = 0; Some(Ok(b'\n')) - }, + } Some(Ok(c)) => { self.col += 1; Some(Ok(c)) - }, + } Some(Err(e)) => Some(Err(e)), } } diff --git a/serde/src/lib.rs b/serde/src/lib.rs index 467a2266..9560ecb6 100644 --- a/serde/src/lib.rs +++ b/serde/src/lib.rs @@ -79,7 +79,7 @@ extern crate core as actual_core; #[cfg(feature = "std")] mod core { pub use std::{ops, hash, fmt, cmp, marker, mem, i8, i16, i32, i64, u8, u16, u32, u64, isize, - usize, f32, f64, char, str, num, slice, iter, cell, default, result, option}; + usize, f32, f64, char, str, num, slice, iter, cell, default, result, option}; #[cfg(feature = "unstable")] pub use actual_core::nonzero; } diff --git a/serde/src/ser/impls.rs b/serde/src/ser/impls.rs index f54161fa..745903fa 100644 --- a/serde/src/ser/impls.rs +++ b/serde/src/ser/impls.rs @@ -4,25 +4,9 @@ use std::borrow::Cow; use collections::borrow::Cow; #[cfg(feature = "std")] -use std::collections::{ - BinaryHeap, - BTreeMap, - BTreeSet, - LinkedList, - HashMap, - HashSet, - VecDeque, -}; +use std::collections::{BinaryHeap, BTreeMap, BTreeSet, LinkedList, HashMap, HashSet, VecDeque}; #[cfg(all(feature = "collections", not(feature = "std")))] -use collections::{ - BinaryHeap, - BTreeMap, - BTreeSet, - LinkedList, - VecDeque, - String, - Vec, -}; +use collections::{BinaryHeap, BTreeMap, BTreeSet, LinkedList, VecDeque, String, Vec}; #[cfg(feature = "collections")] use collections::borrow::ToOwned; @@ -57,12 +41,7 @@ use core::marker::PhantomData; #[cfg(feature = "unstable")] use core::nonzero::{NonZero, Zeroable}; -use super::{ - Serialize, - SerializeSeq, - SerializeTuple, - Serializer, -}; +use super::{Serialize, SerializeSeq, SerializeTuple, Serializer}; #[cfg(feature = "std")] use super::Error; @@ -101,7 +80,7 @@ impl_visit!(char, serialize_char); impl Serialize for str { #[inline] fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { serializer.serialize_str(self) } @@ -111,7 +90,7 @@ impl Serialize for str { impl Serialize for String { #[inline] fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { (&self[..]).serialize(serializer) } @@ -124,7 +103,7 @@ impl Serialize for Option { #[inline] fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { match *self { Some(ref value) => serializer.serialize_some(value), @@ -138,7 +117,7 @@ impl Serialize for Option impl Serialize for PhantomData { #[inline] fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { serializer.serialize_unit_struct("PhantomData") } @@ -211,7 +190,7 @@ macro_rules! serialize_seq { } impl Serialize for [T] - where T: Serialize, + where T: Serialize { serialize_seq!(); } @@ -225,7 +204,7 @@ impl Serialize for BinaryHeap #[cfg(any(feature = "std", feature = "collections"))] impl Serialize for BTreeSet - where T: Serialize + Ord, + where T: Serialize + Ord { serialize_seq!(); } @@ -233,14 +212,14 @@ impl Serialize for BTreeSet #[cfg(feature = "std")] impl Serialize for HashSet where T: Serialize + Eq + Hash, - H: BuildHasher, + H: BuildHasher { serialize_seq!(); } #[cfg(any(feature = "std", feature = "collections"))] impl Serialize for LinkedList - where T: Serialize, + where T: Serialize { serialize_seq!(); } @@ -262,11 +241,11 @@ impl Serialize for VecDeque #[cfg(feature = "unstable")] impl Serialize for ops::Range where ops::Range: ExactSizeIterator + iter::Iterator + Clone, - A: Serialize, + A: Serialize { #[inline] fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { let mut seq = try!(serializer.serialize_seq(Some(self.len()))); for e in self.clone() { @@ -279,11 +258,11 @@ impl Serialize for ops::Range #[cfg(feature = "unstable")] impl Serialize for ops::RangeInclusive where ops::RangeInclusive: ExactSizeIterator + iter::Iterator + Clone, - A: Serialize, + A: Serialize { #[inline] fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { let mut seq = try!(serializer.serialize_seq(Some(self.len()))); for e in self.clone() { @@ -298,7 +277,7 @@ impl Serialize for ops::RangeInclusive impl Serialize for () { #[inline] fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { serializer.serialize_unit() } @@ -518,7 +497,7 @@ macro_rules! serialize_map { #[cfg(any(feature = "std", feature = "collections"))] impl Serialize for BTreeMap where K: Serialize + Ord, - V: Serialize, + V: Serialize { serialize_map!(); } @@ -527,26 +506,30 @@ impl Serialize for BTreeMap impl Serialize for HashMap where K: Serialize + Eq + Hash, V: Serialize, - H: BuildHasher, + H: BuildHasher { serialize_map!(); } /////////////////////////////////////////////////////////////////////////////// -impl<'a, T: ?Sized> Serialize for &'a T where T: Serialize { +impl<'a, T: ?Sized> Serialize for &'a T + where T: Serialize +{ #[inline] fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { (**self).serialize(serializer) } } -impl<'a, T: ?Sized> Serialize for &'a mut T where T: Serialize { +impl<'a, T: ?Sized> Serialize for &'a mut T + where T: Serialize +{ #[inline] fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { (**self).serialize(serializer) } @@ -558,7 +541,7 @@ impl Serialize for Box { #[inline] fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { (**self).serialize(serializer) } @@ -570,7 +553,7 @@ impl Serialize for Rc { #[inline] fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { (**self).serialize(serializer) } @@ -582,7 +565,7 @@ impl Serialize for Arc { #[inline] fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { (**self).serialize(serializer) } @@ -594,7 +577,7 @@ impl<'a, T: ?Sized> Serialize for Cow<'a, T> { #[inline] fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { (**self).serialize(serializer) } @@ -610,9 +593,7 @@ impl Serialize for Result where S: Serializer { match *self { - Result::Ok(ref value) => { - serializer.serialize_newtype_variant("Result", 0, "Ok", value) - } + Result::Ok(ref value) => serializer.serialize_newtype_variant("Result", 0, "Ok", value), Result::Err(ref value) => { serializer.serialize_newtype_variant("Result", 1, "Err", value) } @@ -625,7 +606,7 @@ impl Serialize for Result #[cfg(feature = "std")] impl Serialize for Duration { fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { use super::SerializeStruct; let mut state = try!(serializer.serialize_struct("Duration", 2)); @@ -640,7 +621,7 @@ impl Serialize for Duration { #[cfg(feature = "std")] impl Serialize for net::IpAddr { fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { self.to_string().serialize(serializer) } @@ -649,7 +630,7 @@ impl Serialize for net::IpAddr { #[cfg(feature = "std")] impl Serialize for net::Ipv4Addr { fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { self.to_string().serialize(serializer) } @@ -658,7 +639,7 @@ impl Serialize for net::Ipv4Addr { #[cfg(feature = "std")] impl Serialize for net::Ipv6Addr { fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { self.to_string().serialize(serializer) } @@ -669,7 +650,7 @@ impl Serialize for net::Ipv6Addr { #[cfg(feature = "std")] impl Serialize for net::SocketAddr { fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { match *self { net::SocketAddr::V4(ref addr) => addr.serialize(serializer), @@ -681,7 +662,7 @@ impl Serialize for net::SocketAddr { #[cfg(feature = "std")] impl Serialize for net::SocketAddrV4 { fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { self.to_string().serialize(serializer) } @@ -690,7 +671,7 @@ impl Serialize for net::SocketAddrV4 { #[cfg(feature = "std")] impl Serialize for net::SocketAddrV6 { fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { self.to_string().serialize(serializer) } @@ -701,7 +682,7 @@ impl Serialize for net::SocketAddrV6 { #[cfg(feature = "std")] impl Serialize for path::Path { fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { match self.to_str() { Some(s) => s.serialize(serializer), @@ -713,7 +694,7 @@ impl Serialize for path::Path { #[cfg(feature = "std")] impl Serialize for path::PathBuf { fn serialize(&self, serializer: S) -> Result - where S: Serializer, + where S: Serializer { self.as_path().serialize(serializer) } diff --git a/serde/src/ser/impossible.rs b/serde/src/ser/impossible.rs index 8c9bf40d..6b8e7c28 100644 --- a/serde/src/ser/impossible.rs +++ b/serde/src/ser/impossible.rs @@ -2,17 +2,8 @@ use core::marker::PhantomData; -use ser::{ - self, - Serialize, - SerializeSeq, - SerializeTuple, - SerializeTupleStruct, - SerializeTupleVariant, - SerializeMap, - SerializeStruct, - SerializeStructVariant, -}; +use ser::{self, Serialize, SerializeSeq, SerializeTuple, SerializeTupleStruct, + SerializeTupleVariant, SerializeMap, SerializeStruct, SerializeStructVariant}; /// Helper type for implementing a `Serializer` that does not support /// serializing one of the compound types. @@ -50,14 +41,12 @@ pub struct Impossible { enum Void {} impl SerializeSeq for Impossible - where E: ser::Error, + where E: ser::Error { type Ok = Ok; type Error = E; - fn serialize_element(&mut self, - _value: &T) - -> Result<(), E> { + fn serialize_element(&mut self, _value: &T) -> Result<(), E> { match self.void {} } @@ -67,14 +56,12 @@ impl SerializeSeq for Impossible } impl SerializeTuple for Impossible - where E: ser::Error, + where E: ser::Error { type Ok = Ok; type Error = E; - fn serialize_element(&mut self, - _value: &T) - -> Result<(), E> { + fn serialize_element(&mut self, _value: &T) -> Result<(), E> { match self.void {} } @@ -84,14 +71,12 @@ impl SerializeTuple for Impossible } impl SerializeTupleStruct for Impossible - where E: ser::Error, + where E: ser::Error { type Ok = Ok; type Error = E; - fn serialize_field(&mut self, - _value: &T) - -> Result<(), E> { + fn serialize_field(&mut self, _value: &T) -> Result<(), E> { match self.void {} } @@ -101,14 +86,12 @@ impl SerializeTupleStruct for Impossible } impl SerializeTupleVariant for Impossible - where E: ser::Error, + where E: ser::Error { type Ok = Ok; type Error = E; - fn serialize_field(&mut self, - _value: &T) - -> Result<(), E> { + fn serialize_field(&mut self, _value: &T) -> Result<(), E> { match self.void {} } @@ -118,20 +101,16 @@ impl SerializeTupleVariant for Impossible } impl SerializeMap for Impossible - where E: ser::Error, + where E: ser::Error { type Ok = Ok; type Error = E; - fn serialize_key(&mut self, - _key: &T) - -> Result<(), E> { + fn serialize_key(&mut self, _key: &T) -> Result<(), E> { match self.void {} } - fn serialize_value(&mut self, - _value: &T) - -> Result<(), E> { + fn serialize_value(&mut self, _value: &T) -> Result<(), E> { match self.void {} } @@ -141,13 +120,13 @@ impl SerializeMap for Impossible } impl SerializeStruct for Impossible - where E: ser::Error, + where E: ser::Error { type Ok = Ok; type Error = E; fn serialize_field(&mut self, - _key: &'static str, + _key: &'static str, _value: &T) -> Result<(), E> { match self.void {} @@ -159,13 +138,13 @@ impl SerializeStruct for Impossible } impl SerializeStructVariant for Impossible - where E: ser::Error, + where E: ser::Error { type Ok = Ok; type Error = E; fn serialize_field(&mut self, - _key: &'static str, + _key: &'static str, _value: &T) -> Result<(), E> { match self.void {} diff --git a/serde/src/ser/mod.rs b/serde/src/ser/mod.rs index 331928a3..369d68b6 100644 --- a/serde/src/ser/mod.rs +++ b/serde/src/ser/mod.rs @@ -174,8 +174,7 @@ pub trait Serialize { /// for more information about how to implement this method. /// /// [impl-serialize]: https://serde.rs/impl-serialize.html - fn serialize(&self, serializer: S) -> Result - where S: Serializer; + fn serialize(&self, serializer: S) -> Result where S: Serializer; } /////////////////////////////////////////////////////////////////////////////// @@ -254,31 +253,31 @@ pub trait Serializer: Sized { /// Type returned from `serialize_seq` and `serialize_seq_fixed_size` for /// serializing the content of the sequence. - type SerializeSeq: SerializeSeq; + type SerializeSeq: SerializeSeq; /// Type returned from `serialize_tuple` for serializing the content of the /// tuple. - type SerializeTuple: SerializeTuple; + type SerializeTuple: SerializeTuple; /// Type returned from `serialize_tuple_struct` for serializing the content /// of the tuple struct. - type SerializeTupleStruct: SerializeTupleStruct; + type SerializeTupleStruct: SerializeTupleStruct; /// Type returned from `serialize_tuple_variant` for serializing the content /// of the tuple variant. - type SerializeTupleVariant: SerializeTupleVariant; + type SerializeTupleVariant: SerializeTupleVariant; /// Type returned from `serialize_map` for serializing the content of the /// map. - type SerializeMap: SerializeMap; + type SerializeMap: SerializeMap; /// Type returned from `serialize_struct` for serializing the content of the /// struct. - type SerializeStruct: SerializeStruct; + type SerializeStruct: SerializeStruct; /// Type returned from `serialize_struct_variant` for serializing the /// content of the struct variant. - type SerializeStructVariant: SerializeStructVariant; + type SerializeStructVariant: SerializeStructVariant; /// Serialize a `bool` value. fn serialize_bool(self, v: bool) -> Result; @@ -371,10 +370,7 @@ pub trait Serializer: Sized { fn serialize_none(self) -> Result; /// Serialize a `Some(T)` value. - fn serialize_some( - self, - value: &T, - ) -> Result; + fn serialize_some(self, value: &T) -> Result; /// Serialize a `()` value. fn serialize_unit(self) -> Result; @@ -382,10 +378,7 @@ pub trait Serializer: Sized { /// Serialize a unit struct like `struct Unit` or `PhantomData`. /// /// A reasonable implementation would be to forward to `serialize_unit`. - fn serialize_unit_struct( - self, - name: &'static str, - ) -> Result; + fn serialize_unit_struct(self, name: &'static str) -> Result; /// Serialize a unit variant like `E::A` in `enum E { A, B }`. /// @@ -401,12 +394,11 @@ pub trait Serializer: Sized { /// E::B => serializer.serialize_unit_variant("E", 1, "B"), /// } /// ``` - fn serialize_unit_variant( - self, - name: &'static str, - variant_index: usize, - variant: &'static str, - ) -> Result; + fn serialize_unit_variant(self, + name: &'static str, + variant_index: usize, + variant: &'static str) + -> Result; /// Serialize a newtype struct like `struct Millimeters(u8)`. /// @@ -417,11 +409,10 @@ pub trait Serializer: Sized { /// ```rust,ignore /// serializer.serialize_newtype_struct("Millimeters", &self.0) /// ``` - fn serialize_newtype_struct( - self, - name: &'static str, - value: &T, - ) -> Result; + fn serialize_newtype_struct(self, + name: &'static str, + value: &T) + -> Result; /// Serialize a newtype variant like `E::N` in `enum E { N(u8) }`. /// @@ -434,13 +425,12 @@ pub trait Serializer: Sized { /// E::N(ref n) => serializer.serialize_newtype_variant("E", 0, "N", n), /// } /// ``` - fn serialize_newtype_variant( - self, - name: &'static str, - variant_index: usize, - variant: &'static str, - value: &T, - ) -> Result; + fn serialize_newtype_variant(self, + name: &'static str, + variant_index: usize, + variant: &'static str, + value: &T) + -> Result; /// Begin to serialize a dynamically sized sequence. This call must be /// followed by zero or more calls to `serialize_element`, then a call to @@ -457,10 +447,7 @@ pub trait Serializer: Sized { /// } /// seq.end() /// ``` - fn serialize_seq( - self, - len: Option, - ) -> Result; + fn serialize_seq(self, len: Option) -> Result; /// Begin to serialize a statically sized sequence whose length will be /// known at deserialization time without looking at the serialized data. @@ -474,10 +461,7 @@ pub trait Serializer: Sized { /// } /// seq.end() /// ``` - fn serialize_seq_fixed_size( - self, - size: usize, - ) -> Result; + fn serialize_seq_fixed_size(self, size: usize) -> Result; /// Begin to serialize a tuple. This call must be followed by zero or more /// calls to `serialize_field`, then a call to `end`. @@ -489,10 +473,7 @@ pub trait Serializer: Sized { /// tup.serialize_field(&self.2)?; /// tup.end() /// ``` - fn serialize_tuple( - self, - len: usize, - ) -> Result; + fn serialize_tuple(self, len: usize) -> Result; /// Begin to serialize a tuple struct like `struct Rgb(u8, u8, u8)`. This /// call must be followed by zero or more calls to `serialize_field`, then a @@ -508,11 +489,10 @@ pub trait Serializer: Sized { /// ts.serialize_field(&self.2)?; /// ts.end() /// ``` - fn serialize_tuple_struct( - self, - name: &'static str, - len: usize, - ) -> Result; + fn serialize_tuple_struct(self, + name: &'static str, + len: usize) + -> Result; /// Begin to serialize a tuple variant like `E::T` in `enum E { T(u8, u8) /// }`. This call must be followed by zero or more calls to @@ -532,13 +512,12 @@ pub trait Serializer: Sized { /// } /// } /// ``` - fn serialize_tuple_variant( - self, - name: &'static str, - variant_index: usize, - variant: &'static str, - len: usize, - ) -> Result; + fn serialize_tuple_variant(self, + name: &'static str, + variant_index: usize, + variant: &'static str, + len: usize) + -> Result; /// Begin to serialize a map. This call must be followed by zero or more /// calls to `serialize_key` and `serialize_value`, then a call to `end`. @@ -554,10 +533,7 @@ pub trait Serializer: Sized { /// } /// map.end() /// ``` - fn serialize_map( - self, - len: Option, - ) -> Result; + fn serialize_map(self, len: Option) -> Result; /// Begin to serialize a struct like `struct Rgb { r: u8, g: u8, b: u8 }`. /// This call must be followed by zero or more calls to `serialize_field`, @@ -573,11 +549,10 @@ pub trait Serializer: Sized { /// struc.serialize_field("b", &self.b)?; /// struc.end() /// ``` - fn serialize_struct( - self, - name: &'static str, - len: usize, - ) -> Result; + fn serialize_struct(self, + name: &'static str, + len: usize) + -> Result; /// Begin to serialize a struct variant like `E::S` in `enum E { S { r: u8, /// g: u8, b: u8 } }`. This call must be followed by zero or more calls to @@ -598,13 +573,12 @@ pub trait Serializer: Sized { /// } /// } /// ``` - fn serialize_struct_variant( - self, - name: &'static str, - variant_index: usize, - variant: &'static str, - len: usize, - ) -> Result; + fn serialize_struct_variant(self, + name: &'static str, + variant_index: usize, + variant: &'static str, + len: usize) + -> Result; /// Collect an iterator as a sequence. /// @@ -613,7 +587,7 @@ pub trait Serializer: Sized { /// this method. fn collect_seq(self, iter: I) -> Result where I: IntoIterator, - ::Item: Serialize, + ::Item: Serialize { let iter = iter.into_iter(); let mut serializer = try!(self.serialize_seq(iter.len_hint())); @@ -631,7 +605,7 @@ pub trait Serializer: Sized { fn collect_map(self, iter: I) -> Result where K: Serialize, V: Serialize, - I: IntoIterator, + I: IntoIterator { let iter = iter.into_iter(); let mut serializer = try!(self.serialize_map(iter.len_hint())); @@ -773,11 +747,10 @@ pub trait SerializeMap { /// `serialize_value`. This is appropriate for serializers that do not care /// about performance or are not able to optimize `serialize_entry` any /// better than this. - fn serialize_entry( - &mut self, - key: &K, - value: &V, - ) -> Result<(), Self::Error> { + fn serialize_entry(&mut self, + key: &K, + value: &V) + -> Result<(), Self::Error> { try!(self.serialize_key(key)); self.serialize_value(value) } @@ -803,7 +776,10 @@ pub trait SerializeStruct { type Error: Error; /// Serialize a struct field. - fn serialize_field(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error>; + fn serialize_field(&mut self, + key: &'static str, + value: &T) + -> Result<(), Self::Error>; /// Finish serializing a struct. fn end(self) -> Result; @@ -830,7 +806,10 @@ pub trait SerializeStructVariant { type Error: Error; /// Serialize a struct variant field. - fn serialize_field(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error>; + fn serialize_field(&mut self, + key: &'static str, + value: &T) + -> Result<(), Self::Error>; /// Finish serializing a struct variant. fn end(self) -> Result; diff --git a/serde/src/ser/private.rs b/serde/src/ser/private.rs index 9d17ec78..9ee92684 100644 --- a/serde/src/ser/private.rs +++ b/serde/src/ser/private.rs @@ -3,14 +3,13 @@ use core::fmt::{self, Display}; use ser::{self, Serialize, Serializer, SerializeMap, SerializeStruct}; /// Not public API. -pub fn serialize_tagged_newtype( - serializer: S, - type_ident: &'static str, - variant_ident: &'static str, - tag: &'static str, - variant_name: &'static str, - value: T, -) -> Result +pub fn serialize_tagged_newtype(serializer: S, + type_ident: &'static str, + variant_ident: &'static str, + tag: &'static str, + variant_name: &'static str, + value: T) + -> Result where S: Serializer, T: Serialize { @@ -181,17 +180,29 @@ impl Serializer for TaggedSerializer Err(self.bad_type(Unsupported::UnitStruct)) } - fn serialize_unit_variant(self, _: &'static str, _: usize, _: &'static str) -> Result { + fn serialize_unit_variant(self, + _: &'static str, + _: usize, + _: &'static str) + -> Result { Err(self.bad_type(Unsupported::Enum)) } - fn serialize_newtype_struct(self, _: &'static str, value: &T) -> Result + fn serialize_newtype_struct(self, + _: &'static str, + value: &T) + -> Result where T: Serialize { value.serialize(self) } - fn serialize_newtype_variant(self, _: &'static str, _: usize, _: &'static str, _: &T) -> Result + fn serialize_newtype_variant(self, + _: &'static str, + _: usize, + _: &'static str, + _: &T) + -> Result where T: Serialize { Err(self.bad_type(Unsupported::Enum)) @@ -209,11 +220,19 @@ impl Serializer for TaggedSerializer Err(self.bad_type(Unsupported::Tuple)) } - fn serialize_tuple_struct(self, _: &'static str, _: usize) -> Result { + fn serialize_tuple_struct(self, + _: &'static str, + _: usize) + -> Result { Err(self.bad_type(Unsupported::TupleStruct)) } - fn serialize_tuple_variant(self, _: &'static str, _: usize, _: &'static str, _: usize) -> Result { + fn serialize_tuple_variant(self, + _: &'static str, + _: usize, + _: &'static str, + _: usize) + -> Result { Err(self.bad_type(Unsupported::Enum)) } @@ -223,13 +242,21 @@ impl Serializer for TaggedSerializer Ok(map) } - fn serialize_struct(self, name: &'static str, len: usize) -> Result { + fn serialize_struct(self, + name: &'static str, + len: usize) + -> Result { let mut state = try!(self.delegate.serialize_struct(name, len + 1)); try!(state.serialize_field(self.tag, self.variant_name)); Ok(state) } - fn serialize_struct_variant(self, _: &'static str, _: usize, _: &'static str, _: usize) -> Result { + fn serialize_struct_variant(self, + _: &'static str, + _: usize, + _: &'static str, + _: usize) + -> Result { Err(self.bad_type(Unsupported::Enum)) } } diff --git a/serde/src/utils.rs b/serde/src/utils.rs index 708eb427..7df7b6cf 100644 --- a/serde/src/utils.rs +++ b/serde/src/utils.rs @@ -1,12 +1,12 @@ //! Private utility functions -const TAG_CONT: u8 = 0b1000_0000; -const TAG_TWO_B: u8 = 0b1100_0000; +const TAG_CONT: u8 = 0b1000_0000; +const TAG_TWO_B: u8 = 0b1100_0000; const TAG_THREE_B: u8 = 0b1110_0000; -const TAG_FOUR_B: u8 = 0b1111_0000; -const MAX_ONE_B: u32 = 0x80; -const MAX_TWO_B: u32 = 0x800; -const MAX_THREE_B: u32 = 0x10000; +const TAG_FOUR_B: u8 = 0b1111_0000; +const MAX_ONE_B: u32 = 0x80; +const MAX_TWO_B: u32 = 0x800; +const MAX_THREE_B: u32 = 0x10000; #[inline] pub fn encode_utf8(c: char) -> EncodeUtf8 { @@ -21,17 +21,20 @@ pub fn encode_utf8(c: char) -> EncodeUtf8 { 2 } else if code < MAX_THREE_B { buf[1] = (code >> 12 & 0x0F) as u8 | TAG_THREE_B; - buf[2] = (code >> 6 & 0x3F) as u8 | TAG_CONT; + buf[2] = (code >> 6 & 0x3F) as u8 | TAG_CONT; buf[3] = (code & 0x3F) as u8 | TAG_CONT; 1 } else { buf[0] = (code >> 18 & 0x07) as u8 | TAG_FOUR_B; buf[1] = (code >> 12 & 0x3F) as u8 | TAG_CONT; - buf[2] = (code >> 6 & 0x3F) as u8 | TAG_CONT; + buf[2] = (code >> 6 & 0x3F) as u8 | TAG_CONT; buf[3] = (code & 0x3F) as u8 | TAG_CONT; 0 }; - EncodeUtf8 { buf: buf, pos: pos } + EncodeUtf8 { + buf: buf, + pos: pos, + } } pub struct EncodeUtf8 { @@ -47,23 +50,22 @@ impl EncodeUtf8 { } #[allow(non_upper_case_globals)] -const Pattern_White_Space_table: &'static [(char, char)] = &[ - ('\u{9}', '\u{d}'), ('\u{20}', '\u{20}'), ('\u{85}', '\u{85}'), ('\u{200e}', '\u{200f}'), - ('\u{2028}', '\u{2029}') -]; +const Pattern_White_Space_table: &'static [(char, char)] = &[('\u{9}', '\u{d}'), + ('\u{20}', '\u{20}'), + ('\u{85}', '\u{85}'), + ('\u{200e}', '\u{200f}'), + ('\u{2028}', '\u{2029}')]; fn bsearch_range_table(c: char, r: &'static [(char, char)]) -> bool { use core::cmp::Ordering::{Equal, Less, Greater}; - r.binary_search_by(|&(lo, hi)| { - if c < lo { + r.binary_search_by(|&(lo, hi)| if c < lo { Greater } else if hi < c { Less } else { Equal - } - }) - .is_ok() + }) + .is_ok() } #[allow(non_snake_case)] diff --git a/serde_codegen_internals/src/ast.rs b/serde_codegen_internals/src/ast.rs index 2941c164..ea598d80 100644 --- a/serde_codegen_internals/src/ast.rs +++ b/serde_codegen_internals/src/ast.rs @@ -39,9 +39,7 @@ impl<'a> Item<'a> { let attrs = attr::Item::from_ast(cx, item); let body = match item.body { - syn::Body::Enum(ref variants) => { - Body::Enum(enum_from_ast(cx, variants)) - } + syn::Body::Enum(ref variants) => Body::Enum(enum_from_ast(cx, variants)), syn::Body::Struct(ref variant_data) => { let (style, fields) = struct_from_ast(cx, variant_data); Body::Struct(style, fields) @@ -58,15 +56,13 @@ impl<'a> Item<'a> { } impl<'a> Body<'a> { - pub fn all_fields(&'a self) -> Box> + 'a> { + pub fn all_fields(&'a self) -> Box> + 'a> { match *self { Body::Enum(ref variants) => { Box::new(variants.iter() - .flat_map(|variant| variant.fields.iter())) - } - Body::Struct(_, ref fields) => { - Box::new(fields.iter()) + .flat_map(|variant| variant.fields.iter())) } + Body::Struct(_, ref fields) => Box::new(fields.iter()), } } } @@ -87,18 +83,12 @@ fn enum_from_ast<'a>(cx: &Ctxt, variants: &'a [syn::Variant]) -> Vec fn struct_from_ast<'a>(cx: &Ctxt, data: &'a syn::VariantData) -> (Style, Vec>) { match *data { - syn::VariantData::Struct(ref fields) => { - (Style::Struct, fields_from_ast(cx, fields)) - } + syn::VariantData::Struct(ref fields) => (Style::Struct, fields_from_ast(cx, fields)), syn::VariantData::Tuple(ref fields) if fields.len() == 1 => { (Style::Newtype, fields_from_ast(cx, fields)) } - syn::VariantData::Tuple(ref fields) => { - (Style::Tuple, fields_from_ast(cx, fields)) - } - syn::VariantData::Unit => { - (Style::Unit, Vec::new()) - } + syn::VariantData::Tuple(ref fields) => (Style::Tuple, fields_from_ast(cx, fields)), + syn::VariantData::Unit => (Style::Unit, Vec::new()), } } diff --git a/serde_codegen_internals/src/attr.rs b/serde_codegen_internals/src/attr.rs index 97fa4650..224bb939 100644 --- a/serde_codegen_internals/src/attr.rs +++ b/serde_codegen_internals/src/attr.rs @@ -157,7 +157,8 @@ impl Item { // Parse `#[serde(bound="D: Serialize")]` MetaItem(NameValue(ref name, ref lit)) if name == "bound" => { - if let Ok(where_predicates) = parse_lit_into_where(cx, name.as_ref(), name.as_ref(), lit) { + if let Ok(where_predicates) = + parse_lit_into_where(cx, name.as_ref(), name.as_ref(), lit) { ser_bound.set(where_predicates.clone()); de_bound.set(where_predicates); } @@ -217,10 +218,12 @@ impl Item { if let syn::Body::Enum(ref variants) = item.body { for variant in variants { match variant.data { - syn::VariantData::Struct(_) | syn::VariantData::Unit => {} + syn::VariantData::Struct(_) | + syn::VariantData::Unit => {} syn::VariantData::Tuple(ref fields) => { if fields.len() != 1 { - cx.error("#[serde(tag = \"...\")] cannot be used with tuple variants"); + cx.error("#[serde(tag = \"...\")] cannot be used with tuple \ + variants"); break; } } @@ -311,8 +314,7 @@ impl Variant { } MetaItem(ref meta_item) => { - cx.error(format!("unknown serde variant attribute `{}`", - meta_item.name())); + cx.error(format!("unknown serde variant attribute `{}`", meta_item.name())); } Literal(_) => { @@ -372,9 +374,7 @@ pub enum FieldDefault { impl Field { /// Extract out the `#[serde(...)]` attributes from a struct field. - pub fn from_ast(cx: &Ctxt, - index: usize, - field: &syn::Field) -> Self { + pub fn from_ast(cx: &Ctxt, index: usize, field: &syn::Field) -> Self { let mut ser_name = Attr::none(cx, "rename"); let mut de_name = Attr::none(cx, "rename"); let mut skip_serializing = BoolAttr::none(cx, "skip_serializing"); @@ -455,7 +455,8 @@ impl Field { // Parse `#[serde(bound="D: Serialize")]` MetaItem(NameValue(ref name, ref lit)) if name == "bound" => { - if let Ok(where_predicates) = parse_lit_into_where(cx, name.as_ref(), name.as_ref(), lit) { + if let Ok(where_predicates) = + parse_lit_into_where(cx, name.as_ref(), name.as_ref(), lit) { ser_bound.set(where_predicates.clone()); de_bound.set(where_predicates); } @@ -470,8 +471,7 @@ impl Field { } MetaItem(ref meta_item) => { - cx.error(format!("unknown serde field attribute `{}`", - meta_item.name())); + cx.error(format!("unknown serde field attribute `{}`", meta_item.name())); } Literal(_) => { @@ -542,13 +542,12 @@ impl Field { type SerAndDe = (Option, Option); -fn get_ser_and_de( - cx: &Ctxt, - attr_name: &'static str, - items: &[syn::NestedMetaItem], - f: F -) -> Result, ()> - where F: Fn(&Ctxt, &str, &str, &syn::Lit) -> Result, +fn get_ser_and_de(cx: &Ctxt, + attr_name: &'static str, + items: &[syn::NestedMetaItem], + f: F) + -> Result, ()> + where F: Fn(&Ctxt, &str, &str, &syn::Lit) -> Result { let mut ser_item = Attr::none(cx, attr_name); let mut de_item = Attr::none(cx, attr_name); @@ -568,7 +567,8 @@ fn get_ser_and_de( } _ => { - cx.error(format!("malformed {0} attribute, expected `{0}(serialize = ..., deserialize = ...)`", + cx.error(format!("malformed {0} attribute, expected `{0}(serialize = ..., \ + deserialize = ...)`", attr_name)); return Err(()); } @@ -578,35 +578,34 @@ fn get_ser_and_de( Ok((ser_item.get(), de_item.get())) } -fn get_renames( - cx: &Ctxt, - items: &[syn::NestedMetaItem], -) -> Result, ()> { +fn get_renames(cx: &Ctxt, items: &[syn::NestedMetaItem]) -> Result, ()> { get_ser_and_de(cx, "rename", items, get_string_from_lit) } -fn get_where_predicates( - cx: &Ctxt, - items: &[syn::NestedMetaItem], -) -> Result>, ()> { +fn get_where_predicates(cx: &Ctxt, + items: &[syn::NestedMetaItem]) + -> Result>, ()> { get_ser_and_de(cx, "bound", items, parse_lit_into_where) } pub fn get_serde_meta_items(attr: &syn::Attribute) -> Option> { match attr.value { - List(ref name, ref items) if name == "serde" => { - Some(items.iter().cloned().collect()) - } - _ => None + List(ref name, ref items) if name == "serde" => Some(items.iter().cloned().collect()), + _ => None, } } -fn get_string_from_lit(cx: &Ctxt, attr_name: &str, meta_item_name: &str, lit: &syn::Lit) -> Result { +fn get_string_from_lit(cx: &Ctxt, + attr_name: &str, + meta_item_name: &str, + lit: &syn::Lit) + -> Result { if let syn::Lit::Str(ref s, _) = *lit { Ok(s.clone()) } else { cx.error(format!("expected serde {} attribute to be a string: `{} = \"...\"`", - attr_name, meta_item_name)); + attr_name, + meta_item_name)); Err(()) } } @@ -616,7 +615,11 @@ fn parse_lit_into_path(cx: &Ctxt, attr_name: &str, lit: &syn::Lit) -> Result Result, ()> { +fn parse_lit_into_where(cx: &Ctxt, + attr_name: &str, + meta_item_name: &str, + lit: &syn::Lit) + -> Result, ()> { let string = try!(get_string_from_lit(cx, attr_name, meta_item_name, lit)); if string.is_empty() { return Ok(Vec::new()); diff --git a/serde_codegen_internals/src/ctxt.rs b/serde_codegen_internals/src/ctxt.rs index a1455332..a112c7e9 100644 --- a/serde_codegen_internals/src/ctxt.rs +++ b/serde_codegen_internals/src/ctxt.rs @@ -8,9 +8,7 @@ pub struct Ctxt { impl Ctxt { pub fn new() -> Self { - Ctxt { - errors: RefCell::new(Some(Vec::new())), - } + Ctxt { errors: RefCell::new(Some(Vec::new())) } } pub fn error(&self, msg: T) { diff --git a/serde_derive/src/bound.rs b/serde_derive/src/bound.rs index fef77ba3..e386e2a3 100644 --- a/serde_derive/src/bound.rs +++ b/serde_derive/src/bound.rs @@ -10,36 +10,33 @@ use internals::attr; // allowed here". pub fn without_defaults(generics: &syn::Generics) -> syn::Generics { syn::Generics { - ty_params: generics.ty_params.iter().map(|ty_param| { - syn::TyParam { - default: None, - .. ty_param.clone() - }}).collect(), - .. generics.clone() + ty_params: generics.ty_params + .iter() + .map(|ty_param| syn::TyParam { default: None, ..ty_param.clone() }) + .collect(), + ..generics.clone() } } -pub fn with_where_predicates( - generics: &syn::Generics, - predicates: &[syn::WherePredicate], -) -> syn::Generics { +pub fn with_where_predicates(generics: &syn::Generics, + predicates: &[syn::WherePredicate]) + -> syn::Generics { aster::from_generics(generics.clone()) .with_predicates(predicates.to_vec()) .build() } -pub fn with_where_predicates_from_fields( - item: &Item, - generics: &syn::Generics, - from_field: F, -) -> syn::Generics - where F: Fn(&attr::Field) -> Option<&[syn::WherePredicate]>, +pub fn with_where_predicates_from_fields(item: &Item, + generics: &syn::Generics, + from_field: F) + -> syn::Generics + where F: Fn(&attr::Field) -> Option<&[syn::WherePredicate]> { aster::from_generics(generics.clone()) - .with_predicates( - item.body.all_fields() - .flat_map(|field| from_field(&field.attrs)) - .flat_map(|predicates| predicates.to_vec())) + .with_predicates(item.body + .all_fields() + .flat_map(|field| from_field(&field.attrs)) + .flat_map(|predicates| predicates.to_vec())) .build() } @@ -54,13 +51,12 @@ pub fn with_where_predicates_from_fields( // #[serde(skip_serializing)] // c: C, // } -pub fn with_bound( - item: &Item, - generics: &syn::Generics, - filter: F, - bound: &syn::Path, -) -> syn::Generics - where F: Fn(&attr::Field) -> bool, +pub fn with_bound(item: &Item, + generics: &syn::Generics, + filter: F, + bound: &syn::Path) + -> syn::Generics + where F: Fn(&attr::Field) -> bool { struct FindTyParams { // Set of all generic type parameters on the current struct (A, B, C in @@ -90,11 +86,13 @@ pub fn with_bound( } } - let all_ty_params: HashSet<_> = generics.ty_params.iter() + let all_ty_params: HashSet<_> = generics.ty_params + .iter() .map(|ty_param| ty_param.ident.clone()) .collect(); - let relevant_tys = item.body.all_fields() + let relevant_tys = item.body + .all_fields() .filter(|&field| filter(&field.attrs)) .map(|field| &field.ty); @@ -107,15 +105,17 @@ pub fn with_bound( } aster::from_generics(generics.clone()) - .with_predicates( - generics.ty_params.iter() - .map(|ty_param| ty_param.ident.clone()) - .filter(|id| visitor.relevant_ty_params.contains(id)) - .map(|id| aster::where_predicate() + .with_predicates(generics.ty_params + .iter() + .map(|ty_param| ty_param.ident.clone()) + .filter(|id| visitor.relevant_ty_params.contains(id)) + .map(|id| { + aster::where_predicate() // the type parameter that is being bounded e.g. T .bound().build(aster::ty().id(id)) // the bound e.g. Serialize .bound().trait_(bound.clone()).build() - .build())) + .build() + })) .build() } diff --git a/serde_derive/src/de.rs b/serde_derive/src/de.rs index 95abd5f0..9e203ec9 100644 --- a/serde_derive/src/de.rs +++ b/serde_derive/src/de.rs @@ -18,13 +18,14 @@ pub fn expand_derive_deserialize(item: &syn::DeriveInput) -> Result Result syn::Generics { let generics = bound::without_defaults(item.generics); - let generics = bound::with_where_predicates_from_fields( - item, &generics, - |attrs| attrs.de_bound()); + let generics = + bound::with_where_predicates_from_fields(item, &generics, |attrs| attrs.de_bound()); match item.attrs.de_bound() { - Some(predicates) => { - bound::with_where_predicates(&generics, predicates) - } + Some(predicates) => bound::with_where_predicates(&generics, predicates), None => { - let generics = bound::with_bound(item, &generics, - needs_deserialize_bound, - &aster::path().ids(&["_serde", "Deserialize"]).build()); - bound::with_bound(item, &generics, - requires_default, - &aster::path().global().ids(&["std", "default", "Default"]).build()) + let generics = + bound::with_bound(item, + &generics, + needs_deserialize_bound, + &aster::path().ids(&["_serde", "Deserialize"]).build()); + bound::with_bound(item, + &generics, + requires_default, + &aster::path().global().ids(&["std", "default", "Default"]).build()) } } } @@ -74,9 +75,7 @@ fn build_impl_generics(item: &Item) -> syn::Generics { // attribute specify their own bound so we do not generate one. All other fields // may need a `T: Deserialize` bound where T is the type of the field. fn needs_deserialize_bound(attrs: &attr::Field) -> bool { - !attrs.skip_deserializing() - && attrs.deserialize_with().is_none() - && attrs.de_bound().is_none() + !attrs.skip_deserializing() && attrs.deserialize_with().is_none() && attrs.de_bound().is_none() } // Fields with a `default` attribute (not `default=...`), and fields with a @@ -85,33 +84,23 @@ fn requires_default(attrs: &attr::Field) -> bool { attrs.default() == &attr::FieldDefault::Default } -fn deserialize_body( - item: &Item, - impl_generics: &syn::Generics, - ty: syn::Ty, -) -> Tokens { +fn deserialize_body(item: &Item, impl_generics: &syn::Generics, ty: syn::Ty) -> Tokens { match item.body { Body::Enum(ref variants) => { - deserialize_item_enum( - &item.ident, - impl_generics, - ty, - variants, - &item.attrs) + deserialize_item_enum(&item.ident, impl_generics, ty, variants, &item.attrs) } Body::Struct(Style::Struct, ref fields) => { if fields.iter().any(|field| field.ident.is_none()) { panic!("struct has unnamed fields"); } - deserialize_struct( - &item.ident, - None, - impl_generics, - ty, - fields, - &item.attrs, - None) + deserialize_struct(&item.ident, + None, + impl_generics, + ty, + fields, + &item.attrs, + None) } Body::Struct(Style::Tuple, ref fields) | Body::Struct(Style::Newtype, ref fields) => { @@ -119,20 +108,15 @@ fn deserialize_body( panic!("tuple struct has named fields"); } - deserialize_tuple( - &item.ident, - None, - impl_generics, - ty, - fields, - &item.attrs, - None) - } - Body::Struct(Style::Unit, _) => { - deserialize_unit_struct( - &item.ident, - &item.attrs) + deserialize_tuple(&item.ident, + None, + impl_generics, + ty, + fields, + &item.attrs, + None) } + Body::Struct(Style::Unit, _) => deserialize_unit_struct(&item.ident, &item.attrs), } } @@ -145,33 +129,37 @@ fn deserialize_body( // 3. the expression for instantiating the visitor fn deserialize_visitor(generics: &syn::Generics) -> (Tokens, Tokens, Tokens) { if generics.lifetimes.is_empty() && generics.ty_params.is_empty() { - ( - quote! { + (quote! { struct __Visitor; }, - quote!(__Visitor), - quote!(__Visitor), - ) + quote!(__Visitor), + quote!(__Visitor)) } else { let where_clause = &generics.where_clause; let num_phantoms = generics.lifetimes.len() + generics.ty_params.len(); - let phantom_types = generics.lifetimes.iter() + let phantom_types = generics.lifetimes + .iter() .map(|lifetime_def| { let lifetime = &lifetime_def.lifetime; quote!(_serde::export::PhantomData<& #lifetime ()>) - }).chain(generics.ty_params.iter() + }) + .chain(generics.ty_params + .iter() .map(|ty_param| { let ident = &ty_param.ident; quote!(_serde::export::PhantomData<#ident>) })); - let all_params = generics.lifetimes.iter() + let all_params = generics.lifetimes + .iter() .map(|lifetime_def| { let lifetime = &lifetime_def.lifetime; quote!(#lifetime) - }).chain(generics.ty_params.iter() + }) + .chain(generics.ty_params + .iter() .map(|ty_param| { let ident = &ty_param.ident; quote!(#ident) @@ -186,20 +174,15 @@ fn deserialize_visitor(generics: &syn::Generics) -> (Tokens, Tokens, Tokens) { let phantom_exprs = iter::repeat(quote!(_serde::export::PhantomData)).take(num_phantoms); - ( - quote! { + (quote! { struct __Visitor #generics ( #(#phantom_types),* ) #where_clause; }, - quote!(__Visitor <#(#all_params),*> ), - quote!(__Visitor #ty_param_idents ( #(#phantom_exprs),* )), - ) + quote!(__Visitor <#(#all_params),*> ), + quote!(__Visitor #ty_param_idents ( #(#phantom_exprs),* ))) } } -fn deserialize_unit_struct( - type_ident: &syn::Ident, - item_attrs: &attr::Item, -) -> Tokens { +fn deserialize_unit_struct(type_ident: &syn::Ident, item_attrs: &attr::Item) -> Tokens { let type_name = item_attrs.name().deserialize_name(); let expecting = format!("unit struct {}", type_ident); @@ -233,15 +216,14 @@ fn deserialize_unit_struct( }) } -fn deserialize_tuple( - type_ident: &syn::Ident, - variant_ident: Option<&syn::Ident>, - impl_generics: &syn::Generics, - ty: syn::Ty, - fields: &[Field], - item_attrs: &attr::Item, - deserializer: Option, -) -> Tokens { +fn deserialize_tuple(type_ident: &syn::Ident, + variant_ident: Option<&syn::Ident>, + impl_generics: &syn::Generics, + ty: syn::Ty, + fields: &[Field], + item_attrs: &attr::Item, + deserializer: Option) + -> Tokens { let where_clause = &impl_generics.where_clause; let (visitor_item, visitor_ty, visitor_expr) = deserialize_visitor(impl_generics); @@ -259,23 +241,12 @@ fn deserialize_tuple( let nfields = fields.len(); let visit_newtype_struct = if !is_enum && nfields == 1 { - Some(deserialize_newtype_struct( - type_ident, - &type_path, - impl_generics, - &fields[0], - )) + Some(deserialize_newtype_struct(type_ident, &type_path, impl_generics, &fields[0])) } else { None }; - let visit_seq = deserialize_seq( - type_ident, - &type_path, - impl_generics, - fields, - false, - ); + let visit_seq = deserialize_seq(type_ident, &type_path, impl_generics, fields, false); let dispatch = if let Some(deserializer) = deserializer { quote!(_serde::Deserializer::deserialize(#deserializer, #visitor_expr)) @@ -320,13 +291,12 @@ fn deserialize_tuple( }) } -fn deserialize_seq( - type_ident: &syn::Ident, - type_path: &Tokens, - impl_generics: &syn::Generics, - fields: &[Field], - is_struct: bool, -) -> Tokens { +fn deserialize_seq(type_ident: &syn::Ident, + type_path: &Tokens, + impl_generics: &syn::Generics, + fields: &[Field], + is_struct: bool) + -> Tokens { let vars = (0..fields.len()).map(field_i as fn(_) -> _); let deserialized_count = fields.iter() @@ -389,12 +359,11 @@ fn deserialize_seq( } } -fn deserialize_newtype_struct( - type_ident: &syn::Ident, - type_path: &Tokens, - impl_generics: &syn::Generics, - field: &Field, -) -> Tokens { +fn deserialize_newtype_struct(type_ident: &syn::Ident, + type_path: &Tokens, + impl_generics: &syn::Generics, + field: &Field) + -> Tokens { let value = match field.attrs.deserialize_with() { None => { let field_ty = &field.ty; @@ -403,8 +372,8 @@ fn deserialize_newtype_struct( } } Some(path) => { - let (wrapper, wrapper_impl, wrapper_ty) = wrap_deserialize_with( - type_ident, impl_generics, field.ty, path); + let (wrapper, wrapper_impl, wrapper_ty) = + wrap_deserialize_with(type_ident, impl_generics, field.ty, path); quote!({ #wrapper #wrapper_impl @@ -422,15 +391,14 @@ fn deserialize_newtype_struct( } } -fn deserialize_struct( - type_ident: &syn::Ident, - variant_ident: Option<&syn::Ident>, - impl_generics: &syn::Generics, - ty: syn::Ty, - fields: &[Field], - item_attrs: &attr::Item, - deserializer: Option, -) -> Tokens { +fn deserialize_struct(type_ident: &syn::Ident, + variant_ident: Option<&syn::Ident>, + impl_generics: &syn::Generics, + ty: syn::Ty, + fields: &[Field], + item_attrs: &attr::Item, + deserializer: Option) + -> Tokens { let is_enum = variant_ident.is_some(); let is_untagged = deserializer.is_some(); @@ -447,21 +415,10 @@ fn deserialize_struct( None => format!("struct {}", type_ident), }; - let visit_seq = deserialize_seq( - type_ident, - &type_path, - impl_generics, - fields, - true, - ); + let visit_seq = deserialize_seq(type_ident, &type_path, impl_generics, fields, true); - let (field_visitor, fields_stmt, visit_map) = deserialize_struct_visitor( - type_ident, - type_path, - impl_generics, - fields, - item_attrs, - ); + let (field_visitor, fields_stmt, visit_map) = + deserialize_struct_visitor(type_ident, type_path, impl_generics, fields, item_attrs); let dispatch = if let Some(deserializer) = deserializer { quote! { @@ -527,52 +484,36 @@ fn deserialize_struct( }) } -fn deserialize_item_enum( - type_ident: &syn::Ident, - impl_generics: &syn::Generics, - ty: syn::Ty, - variants: &[Variant], - item_attrs: &attr::Item -) -> Tokens { +fn deserialize_item_enum(type_ident: &syn::Ident, + impl_generics: &syn::Generics, + ty: syn::Ty, + variants: &[Variant], + item_attrs: &attr::Item) + -> Tokens { match *item_attrs.tag() { attr::EnumTag::External => { - deserialize_externally_tagged_enum( - type_ident, - impl_generics, - ty, - variants, - item_attrs, - ) + deserialize_externally_tagged_enum(type_ident, impl_generics, ty, variants, item_attrs) } attr::EnumTag::Internal(ref tag) => { - deserialize_internally_tagged_enum( - type_ident, - impl_generics, - ty, - variants, - item_attrs, - tag, - ) + deserialize_internally_tagged_enum(type_ident, + impl_generics, + ty, + variants, + item_attrs, + tag) } attr::EnumTag::None => { - deserialize_untagged_enum( - type_ident, - impl_generics, - ty, - variants, - item_attrs, - ) + deserialize_untagged_enum(type_ident, impl_generics, ty, variants, item_attrs) } } } -fn deserialize_externally_tagged_enum( - type_ident: &syn::Ident, - impl_generics: &syn::Generics, - ty: syn::Ty, - variants: &[Variant], - item_attrs: &attr::Item, -) -> Tokens { +fn deserialize_externally_tagged_enum(type_ident: &syn::Ident, + impl_generics: &syn::Generics, + ty: syn::Ty, + variants: &[Variant], + item_attrs: &attr::Item) + -> Tokens { let where_clause = &impl_generics.where_clause; let type_name = item_attrs.name().deserialize_name(); @@ -592,11 +533,7 @@ fn deserialize_externally_tagged_enum( } }; - let variant_visitor = deserialize_field_visitor( - variant_names_idents, - item_attrs, - true, - ); + let variant_visitor = deserialize_field_visitor(variant_names_idents, item_attrs, true); // Match arms to extract a variant from a string let variant_arms = variants.iter() @@ -605,13 +542,11 @@ fn deserialize_externally_tagged_enum( .map(|(i, variant)| { let variant_name = field_i(i); - let block = deserialize_externally_tagged_variant( - type_ident, - impl_generics, - ty.clone(), - variant, - item_attrs, - ); + let block = deserialize_externally_tagged_variant(type_ident, + impl_generics, + ty.clone(), + variant, + item_attrs); quote! { (__Field::#variant_name, visitor) => #block @@ -664,14 +599,13 @@ fn deserialize_externally_tagged_enum( }) } -fn deserialize_internally_tagged_enum( - type_ident: &syn::Ident, - impl_generics: &syn::Generics, - ty: syn::Ty, - variants: &[Variant], - item_attrs: &attr::Item, - tag: &str, -) -> Tokens { +fn deserialize_internally_tagged_enum(type_ident: &syn::Ident, + impl_generics: &syn::Generics, + ty: syn::Ty, + variants: &[Variant], + item_attrs: &attr::Item, + tag: &str) + -> Tokens { let variant_names_idents: Vec<_> = variants.iter() .enumerate() .filter(|&(_, variant)| !variant.attrs.skip_deserializing()) @@ -685,11 +619,7 @@ fn deserialize_internally_tagged_enum( } }; - let variant_visitor = deserialize_field_visitor( - variant_names_idents, - item_attrs, - true, - ); + let variant_visitor = deserialize_field_visitor(variant_names_idents, item_attrs, true); // Match arms to extract a variant from a string let variant_arms = variants.iter() @@ -727,13 +657,12 @@ fn deserialize_internally_tagged_enum( }) } -fn deserialize_untagged_enum( - type_ident: &syn::Ident, - impl_generics: &syn::Generics, - ty: syn::Ty, - variants: &[Variant], - item_attrs: &attr::Item, -) -> Tokens { +fn deserialize_untagged_enum(type_ident: &syn::Ident, + impl_generics: &syn::Generics, + ty: syn::Ty, + variants: &[Variant], + item_attrs: &attr::Item) + -> Tokens { let attempts = variants.iter() .filter(|variant| !variant.attrs.skip_deserializing()) .map(|variant| { @@ -768,13 +697,12 @@ fn deserialize_untagged_enum( }) } -fn deserialize_externally_tagged_variant( - type_ident: &syn::Ident, - generics: &syn::Generics, - ty: syn::Ty, - variant: &Variant, - item_attrs: &attr::Item, -) -> Tokens { +fn deserialize_externally_tagged_variant(type_ident: &syn::Ident, + generics: &syn::Generics, + ty: syn::Ty, + variant: &Variant, + item_attrs: &attr::Item) + -> Tokens { let variant_ident = &variant.ident; match variant.style { @@ -785,46 +713,39 @@ fn deserialize_externally_tagged_variant( }) } Style::Newtype => { - deserialize_externally_tagged_newtype_variant( - type_ident, - variant_ident, - generics, - &variant.fields[0], - ) + deserialize_externally_tagged_newtype_variant(type_ident, + variant_ident, + generics, + &variant.fields[0]) } Style::Tuple => { - deserialize_tuple( - type_ident, - Some(variant_ident), - generics, - ty, - &variant.fields, - item_attrs, - None, - ) + deserialize_tuple(type_ident, + Some(variant_ident), + generics, + ty, + &variant.fields, + item_attrs, + None) } Style::Struct => { - deserialize_struct( - type_ident, - Some(variant_ident), - generics, - ty, - &variant.fields, - item_attrs, - None, - ) + deserialize_struct(type_ident, + Some(variant_ident), + generics, + ty, + &variant.fields, + item_attrs, + None) } } } -fn deserialize_internally_tagged_variant( - type_ident: &syn::Ident, - generics: &syn::Generics, - ty: syn::Ty, - variant: &Variant, - item_attrs: &attr::Item, - deserializer: Tokens, -) -> Tokens { +fn deserialize_internally_tagged_variant(type_ident: &syn::Ident, + generics: &syn::Generics, + ty: syn::Ty, + variant: &Variant, + item_attrs: &attr::Item, + deserializer: Tokens) + -> Tokens { let variant_ident = &variant.ident; match variant.style { @@ -837,27 +758,24 @@ fn deserialize_internally_tagged_variant( }) } Style::Newtype | Style::Struct => { - deserialize_untagged_variant( - type_ident, - generics, - ty, - variant, - item_attrs, - deserializer, - ) + deserialize_untagged_variant(type_ident, + generics, + ty, + variant, + item_attrs, + deserializer) } Style::Tuple => unreachable!("checked in serde_codegen_internals"), } } -fn deserialize_untagged_variant( - type_ident: &syn::Ident, - generics: &syn::Generics, - ty: syn::Ty, - variant: &Variant, - item_attrs: &attr::Item, - deserializer: Tokens, -) -> Tokens { +fn deserialize_untagged_variant(type_ident: &syn::Ident, + generics: &syn::Generics, + ty: syn::Ty, + variant: &Variant, + item_attrs: &attr::Item, + deserializer: Tokens) + -> Tokens { let variant_ident = &variant.ident; match variant.style { @@ -874,45 +792,38 @@ fn deserialize_untagged_variant( } } Style::Newtype => { - deserialize_untagged_newtype_variant( - type_ident, - variant_ident, - generics, - &variant.fields[0], - deserializer, - ) + deserialize_untagged_newtype_variant(type_ident, + variant_ident, + generics, + &variant.fields[0], + deserializer) } Style::Tuple => { - deserialize_tuple( - type_ident, - Some(variant_ident), - generics, - ty, - &variant.fields, - item_attrs, - Some(deserializer), - ) + deserialize_tuple(type_ident, + Some(variant_ident), + generics, + ty, + &variant.fields, + item_attrs, + Some(deserializer)) } Style::Struct => { - deserialize_struct( - type_ident, - Some(variant_ident), - generics, - ty, - &variant.fields, - item_attrs, - Some(deserializer), - ) + deserialize_struct(type_ident, + Some(variant_ident), + generics, + ty, + &variant.fields, + item_attrs, + Some(deserializer)) } } } -fn deserialize_externally_tagged_newtype_variant( - type_ident: &syn::Ident, - variant_ident: &syn::Ident, - impl_generics: &syn::Generics, - field: &Field, -) -> Tokens { +fn deserialize_externally_tagged_newtype_variant(type_ident: &syn::Ident, + variant_ident: &syn::Ident, + impl_generics: &syn::Generics, + field: &Field) + -> Tokens { match field.attrs.deserialize_with() { None => { let field_ty = &field.ty; @@ -923,8 +834,8 @@ fn deserialize_externally_tagged_newtype_variant( } } Some(path) => { - let (wrapper, wrapper_impl, wrapper_ty) = wrap_deserialize_with( - type_ident, impl_generics, field.ty, path); + let (wrapper, wrapper_impl, wrapper_ty) = + wrap_deserialize_with(type_ident, impl_generics, field.ty, path); quote!({ #wrapper #wrapper_impl @@ -936,13 +847,12 @@ fn deserialize_externally_tagged_newtype_variant( } } -fn deserialize_untagged_newtype_variant( - type_ident: &syn::Ident, - variant_ident: &syn::Ident, - impl_generics: &syn::Generics, - field: &Field, - deserializer: Tokens, -) -> Tokens { +fn deserialize_untagged_newtype_variant(type_ident: &syn::Ident, + variant_ident: &syn::Ident, + impl_generics: &syn::Generics, + field: &Field, + deserializer: Tokens) + -> Tokens { match field.attrs.deserialize_with() { None => { let field_ty = &field.ty; @@ -953,8 +863,8 @@ fn deserialize_untagged_newtype_variant( }) } Some(path) => { - let (wrapper, wrapper_impl, wrapper_ty) = wrap_deserialize_with( - type_ident, impl_generics, field.ty, path); + let (wrapper, wrapper_impl, wrapper_ty) = + wrap_deserialize_with(type_ident, impl_generics, field.ty, path); quote!({ #wrapper #wrapper_impl @@ -966,11 +876,10 @@ fn deserialize_untagged_newtype_variant( } } -fn deserialize_field_visitor( - fields: Vec<(String, Ident)>, - item_attrs: &attr::Item, - is_variant: bool, -) -> Tokens { +fn deserialize_field_visitor(fields: Vec<(String, Ident)>, + item_attrs: &attr::Item, + is_variant: bool) + -> Tokens { let field_strs = fields.iter().map(|&(ref name, _)| name); let field_bytes = fields.iter().map(|&(ref name, _)| quote::ByteStr(name)); let field_idents: &Vec<_> = &fields.iter().map(|&(_, ref ident)| ident).collect(); @@ -1081,13 +990,12 @@ fn deserialize_field_visitor( } } -fn deserialize_struct_visitor( - type_ident: &syn::Ident, - struct_path: Tokens, - impl_generics: &syn::Generics, - fields: &[Field], - item_attrs: &attr::Item, -) -> (Tokens, Tokens, Tokens) { +fn deserialize_struct_visitor(type_ident: &syn::Ident, + struct_path: Tokens, + impl_generics: &syn::Generics, + fields: &[Field], + item_attrs: &attr::Item) + -> (Tokens, Tokens, Tokens) { let field_names_idents: Vec<_> = fields.iter() .enumerate() .filter(|&(_, field)| !field.attrs.skip_deserializing()) @@ -1101,30 +1009,19 @@ fn deserialize_struct_visitor( } }; - let field_visitor = deserialize_field_visitor( - field_names_idents, - item_attrs, - false, - ); + let field_visitor = deserialize_field_visitor(field_names_idents, item_attrs, false); - let visit_map = deserialize_map( - type_ident, - struct_path, - impl_generics, - fields, - item_attrs, - ); + let visit_map = deserialize_map(type_ident, struct_path, impl_generics, fields, item_attrs); (field_visitor, fields_stmt, visit_map) } -fn deserialize_map( - type_ident: &syn::Ident, - struct_path: Tokens, - impl_generics: &syn::Generics, - fields: &[Field], - item_attrs: &attr::Item, -) -> Tokens { +fn deserialize_map(type_ident: &syn::Ident, + struct_path: Tokens, + impl_generics: &syn::Generics, + fields: &[Field], + item_attrs: &attr::Item) + -> Tokens { // Create the field names for the fields. let fields_names: Vec<_> = fields.iter() .enumerate() @@ -1243,38 +1140,36 @@ fn field_i(i: usize) -> Ident { /// This function wraps the expression in `#[serde(deserialize_with="...")]` in /// a trait to prevent it from accessing the internal `Deserialize` state. -fn wrap_deserialize_with( - type_ident: &syn::Ident, - impl_generics: &syn::Generics, - field_ty: &syn::Ty, - deserialize_with: &syn::Path, -) -> (Tokens, Tokens, syn::Path) { +fn wrap_deserialize_with(type_ident: &syn::Ident, + impl_generics: &syn::Generics, + field_ty: &syn::Ty, + deserialize_with: &syn::Path) + -> (Tokens, Tokens, syn::Path) { // Quasi-quoting doesn't do a great job of expanding generics into paths, // so manually build it. let wrapper_ty = aster::path() .segment("__SerdeDeserializeWithStruct") - .with_generics(impl_generics.clone()) - .build() + .with_generics(impl_generics.clone()) + .build() .build(); let where_clause = &impl_generics.where_clause; let phantom_ty = aster::path() .segment(type_ident) - .with_generics(aster::from_generics(impl_generics.clone()) - .strip_ty_params() - .build()) - .build() + .with_generics(aster::from_generics(impl_generics.clone()) + .strip_ty_params() + .build()) + .build() .build(); - ( - quote! { + (quote! { struct __SerdeDeserializeWithStruct #impl_generics #where_clause { value: #field_ty, phantom: _serde::export::PhantomData<#phantom_ty>, } }, - quote! { + quote! { impl #impl_generics _serde::Deserialize for #wrapper_ty #where_clause { fn deserialize<__D>(__d: __D) -> _serde::export::Result where __D: _serde::Deserializer @@ -1287,8 +1182,7 @@ fn wrap_deserialize_with( } } }, - wrapper_ty, - ) + wrapper_ty) } fn expr_is_missing(attrs: &attr::Field) -> Tokens { @@ -1319,14 +1213,14 @@ fn expr_is_missing(attrs: &attr::Field) -> Tokens { fn check_no_str(cx: &internals::Ctxt, item: &Item) { let fail = || { - cx.error( - "Serde does not support deserializing fields of type &str; \ - consider using String instead"); + cx.error("Serde does not support deserializing fields of type &str; consider using \ + String instead"); }; for field in item.body.all_fields() { - if field.attrs.skip_deserializing() - || field.attrs.deserialize_with().is_some() { continue } + if field.attrs.skip_deserializing() || field.attrs.deserialize_with().is_some() { + continue; + } if let syn::Ty::Rptr(_, ref inner) = *field.ty { if let syn::Ty::Path(_, ref path) = inner.ty { diff --git a/serde_derive/src/ser.rs b/serde_derive/src/ser.rs index 52c86c7e..62786f33 100644 --- a/serde_derive/src/ser.rs +++ b/serde_derive/src/ser.rs @@ -12,13 +12,14 @@ pub fn expand_derive_serialize(item: &syn::DeriveInput) -> Result Result syn::Generics { let generics = bound::without_defaults(item.generics); - let generics = bound::with_where_predicates_from_fields( - item, &generics, - |attrs| attrs.ser_bound()); + let generics = + bound::with_where_predicates_from_fields(item, &generics, |attrs| attrs.ser_bound()); match item.attrs.ser_bound() { - Some(predicates) => { - bound::with_where_predicates(&generics, predicates) - } + Some(predicates) => bound::with_where_predicates(&generics, predicates), None => { - bound::with_bound(item, &generics, - needs_serialize_bound, - &aster::path().ids(&["_serde", "Serialize"]).build()) + bound::with_bound(item, + &generics, + needs_serialize_bound, + &aster::path().ids(&["_serde", "Serialize"]).build()) } } } @@ -66,58 +65,32 @@ fn build_impl_generics(item: &Item) -> syn::Generics { // attribute specify their own bound so we do not generate one. All other fields // may need a `T: Serialize` bound where T is the type of the field. fn needs_serialize_bound(attrs: &attr::Field) -> bool { - !attrs.skip_serializing() - && attrs.serialize_with().is_none() - && attrs.ser_bound().is_none() + !attrs.skip_serializing() && attrs.serialize_with().is_none() && attrs.ser_bound().is_none() } -fn serialize_body( - item: &Item, - impl_generics: &syn::Generics, - ty: syn::Ty, -) -> Tokens { +fn serialize_body(item: &Item, impl_generics: &syn::Generics, ty: syn::Ty) -> Tokens { match item.body { Body::Enum(ref variants) => { - serialize_item_enum( - &item.ident, - impl_generics, - ty, - variants, - &item.attrs) + serialize_item_enum(&item.ident, impl_generics, ty, variants, &item.attrs) } Body::Struct(Style::Struct, ref fields) => { if fields.iter().any(|field| field.ident.is_none()) { panic!("struct has unnamed fields"); } - serialize_struct( - impl_generics, - ty, - fields, - &item.attrs) + serialize_struct(impl_generics, ty, fields, &item.attrs) } Body::Struct(Style::Tuple, ref fields) => { if fields.iter().any(|field| field.ident.is_some()) { panic!("tuple struct has named fields"); } - serialize_tuple_struct( - impl_generics, - ty, - fields, - &item.attrs) + serialize_tuple_struct(impl_generics, ty, fields, &item.attrs) } Body::Struct(Style::Newtype, ref fields) => { - serialize_newtype_struct( - impl_generics, - ty, - &fields[0], - &item.attrs) - } - Body::Struct(Style::Unit, _) => { - serialize_unit_struct( - &item.attrs) + serialize_newtype_struct(impl_generics, ty, &fields[0], &item.attrs) } + Body::Struct(Style::Unit, _) => serialize_unit_struct(&item.attrs), } } @@ -129,18 +102,16 @@ fn serialize_unit_struct(item_attrs: &attr::Item) -> Tokens { } } -fn serialize_newtype_struct( - impl_generics: &syn::Generics, - item_ty: syn::Ty, - field: &Field, - item_attrs: &attr::Item, -) -> Tokens { +fn serialize_newtype_struct(impl_generics: &syn::Generics, + item_ty: syn::Ty, + field: &Field, + item_attrs: &attr::Item) + -> Tokens { let type_name = item_attrs.name().serialize_name(); let mut field_expr = quote!(&self.0); if let Some(path) = field.attrs.serialize_with() { - field_expr = wrap_serialize_with( - &item_ty, impl_generics, field.ty, path, field_expr); + field_expr = wrap_serialize_with(&item_ty, impl_generics, field.ty, path, field_expr); } quote! { @@ -148,19 +119,17 @@ fn serialize_newtype_struct( } } -fn serialize_tuple_struct( - impl_generics: &syn::Generics, - ty: syn::Ty, - fields: &[Field], - item_attrs: &attr::Item, -) -> Tokens { - let serialize_stmts = serialize_tuple_struct_visitor( - ty.clone(), - fields, - impl_generics, - false, - quote!(_serde::ser::SerializeTupleStruct::serialize_field), - ); +fn serialize_tuple_struct(impl_generics: &syn::Generics, + ty: syn::Ty, + fields: &[Field], + item_attrs: &attr::Item) + -> Tokens { + let serialize_stmts = + serialize_tuple_struct_visitor(ty.clone(), + fields, + impl_generics, + false, + quote!(_serde::ser::SerializeTupleStruct::serialize_field)); let type_name = item_attrs.name().serialize_name(); let len = serialize_stmts.len(); @@ -173,19 +142,17 @@ fn serialize_tuple_struct( } } -fn serialize_struct( - impl_generics: &syn::Generics, - ty: syn::Ty, - fields: &[Field], - item_attrs: &attr::Item, -) -> Tokens { - let serialize_fields = serialize_struct_visitor( - ty.clone(), - fields, - impl_generics, - false, - quote!(_serde::ser::SerializeStruct::serialize_field), - ); +fn serialize_struct(impl_generics: &syn::Generics, + ty: syn::Ty, + fields: &[Field], + item_attrs: &attr::Item) + -> Tokens { + let serialize_fields = + serialize_struct_visitor(ty.clone(), + fields, + impl_generics, + false, + quote!(_serde::ser::SerializeStruct::serialize_field)); let type_name = item_attrs.name().serialize_name(); @@ -195,8 +162,7 @@ fn serialize_struct( let let_mut = mut_if(serialized_fields.peek().is_some()); - let len = serialized_fields - .map(|field| { + let len = serialized_fields.map(|field| { let ident = field.ident.clone().expect("struct has unnamed fields"); let field_expr = quote!(&self.#ident); @@ -204,7 +170,7 @@ fn serialize_struct( Some(path) => quote!(if #path(#field_expr) { 0 } else { 1 }), None => quote!(1), } - }) + }) .fold(quote!(0), |sum, expr| quote!(#sum + #expr)); quote! { @@ -214,27 +180,23 @@ fn serialize_struct( } } -fn serialize_item_enum( - type_ident: &syn::Ident, - impl_generics: &syn::Generics, - ty: syn::Ty, - variants: &[Variant], - item_attrs: &attr::Item, -) -> Tokens { - let arms: Vec<_> = - variants.iter() - .enumerate() - .map(|(variant_index, variant)| { - serialize_variant( - type_ident, - impl_generics, - ty.clone(), - variant, - variant_index, - item_attrs, - ) - }) - .collect(); +fn serialize_item_enum(type_ident: &syn::Ident, + impl_generics: &syn::Generics, + ty: syn::Ty, + variants: &[Variant], + item_attrs: &attr::Item) + -> Tokens { + let arms: Vec<_> = variants.iter() + .enumerate() + .map(|(variant_index, variant)| { + serialize_variant(type_ident, + impl_generics, + ty.clone(), + variant, + variant_index, + item_attrs) + }) + .collect(); quote! { match *self { @@ -243,14 +205,13 @@ fn serialize_item_enum( } } -fn serialize_variant( - type_ident: &syn::Ident, - generics: &syn::Generics, - ty: syn::Ty, - variant: &Variant, - variant_index: usize, - item_attrs: &attr::Item, -) -> Tokens { +fn serialize_variant(type_ident: &syn::Ident, + generics: &syn::Generics, + ty: syn::Ty, + variant: &Variant, + variant_index: usize, + item_attrs: &attr::Item) + -> Tokens { let variant_ident = variant.ident.clone(); if variant.attrs.skip_serializing() { @@ -267,7 +228,8 @@ fn serialize_variant( quote! { #type_ident::#variant_ident #fields_pat => #skipped_err, } - } else { // variant wasn't skipped + } else { + // variant wasn't skipped let case = match variant.style { Style::Unit => { quote! { @@ -280,14 +242,15 @@ fn serialize_variant( } } Style::Tuple => { - let field_names = (0 .. variant.fields.len()) + let field_names = (0..variant.fields.len()) .map(|i| Ident::new(format!("__field{}", i))); quote! { #type_ident::#variant_ident(#(ref #field_names),*) } } Style::Struct => { - let fields = variant.fields.iter() + let fields = variant.fields + .iter() .map(|f| f.ident.clone().expect("struct variant has unnamed fields")); quote! { #type_ident::#variant_ident { #(ref #fields),* } @@ -297,33 +260,22 @@ fn serialize_variant( let body = match *item_attrs.tag() { attr::EnumTag::External => { - serialize_externally_tagged_variant( - generics, - ty, - variant, - variant_index, - item_attrs, - ) + serialize_externally_tagged_variant(generics, + ty, + variant, + variant_index, + item_attrs) } attr::EnumTag::Internal(ref tag) => { - serialize_internally_tagged_variant( - type_ident.as_ref(), - variant_ident.as_ref(), - generics, - ty, - variant, - item_attrs, - tag, - ) - } - attr::EnumTag::None => { - serialize_untagged_variant( - generics, - ty, - variant, - item_attrs, - ) + serialize_internally_tagged_variant(type_ident.as_ref(), + variant_ident.as_ref(), + generics, + ty, + variant, + item_attrs, + tag) } + attr::EnumTag::None => serialize_untagged_variant(generics, ty, variant, item_attrs), }; quote! { @@ -332,13 +284,12 @@ fn serialize_variant( } } -fn serialize_externally_tagged_variant( - generics: &syn::Generics, - ty: syn::Ty, - variant: &Variant, - variant_index: usize, - item_attrs: &attr::Item, -) -> Tokens { +fn serialize_externally_tagged_variant(generics: &syn::Generics, + ty: syn::Ty, + variant: &Variant, + variant_index: usize, + item_attrs: &attr::Item) + -> Tokens { let type_name = item_attrs.name().serialize_name(); let variant_name = variant.attrs.name().serialize_name(); @@ -357,8 +308,7 @@ fn serialize_externally_tagged_variant( let field = &variant.fields[0]; let mut field_expr = quote!(__simple_value); if let Some(path) = field.attrs.serialize_with() { - field_expr = wrap_serialize_with( - &ty, generics, field.ty, path, field_expr); + field_expr = wrap_serialize_with(&ty, generics, field.ty, path, field_expr); } quote! { @@ -372,32 +322,28 @@ fn serialize_externally_tagged_variant( } } Style::Tuple => { - let block = serialize_tuple_variant( - TupleVariant::ExternallyTagged { - type_name: type_name, - variant_index: variant_index, - variant_name: variant_name, - }, - generics, - ty, - &variant.fields, - ); + let block = serialize_tuple_variant(TupleVariant::ExternallyTagged { + type_name: type_name, + variant_index: variant_index, + variant_name: variant_name, + }, + generics, + ty, + &variant.fields); quote! { { #block } } } Style::Struct => { - let block = serialize_struct_variant( - StructVariant::ExternallyTagged { - variant_index: variant_index, - variant_name: variant_name, - }, - generics, - ty, - &variant.fields, - item_attrs, - ); + let block = serialize_struct_variant(StructVariant::ExternallyTagged { + variant_index: variant_index, + variant_name: variant_name, + }, + generics, + ty, + &variant.fields, + item_attrs); quote! { { #block } @@ -406,15 +352,14 @@ fn serialize_externally_tagged_variant( } } -fn serialize_internally_tagged_variant( - type_ident: &str, - variant_ident: &str, - generics: &syn::Generics, - ty: syn::Ty, - variant: &Variant, - item_attrs: &attr::Item, - tag: &str, -) -> Tokens { +fn serialize_internally_tagged_variant(type_ident: &str, + variant_ident: &str, + generics: &syn::Generics, + ty: syn::Ty, + variant: &Variant, + item_attrs: &attr::Item, + tag: &str) + -> Tokens { let type_name = item_attrs.name().serialize_name(); let variant_name = variant.attrs.name().serialize_name(); @@ -432,8 +377,7 @@ fn serialize_internally_tagged_variant( let field = &variant.fields[0]; let mut field_expr = quote!(__simple_value); if let Some(path) = field.attrs.serialize_with() { - field_expr = wrap_serialize_with( - &ty, generics, field.ty, path, field_expr); + field_expr = wrap_serialize_with(&ty, generics, field.ty, path, field_expr); } quote! { @@ -448,16 +392,14 @@ fn serialize_internally_tagged_variant( } } Style::Struct => { - let block = serialize_struct_variant( - StructVariant::InternallyTagged { - tag: tag, - variant_name: variant_name, - }, - generics, - ty, - &variant.fields, - item_attrs, - ); + let block = serialize_struct_variant(StructVariant::InternallyTagged { + tag: tag, + variant_name: variant_name, + }, + generics, + ty, + &variant.fields, + item_attrs); quote! { { #block } @@ -467,12 +409,11 @@ fn serialize_internally_tagged_variant( } } -fn serialize_untagged_variant( - generics: &syn::Generics, - ty: syn::Ty, - variant: &Variant, - item_attrs: &attr::Item, -) -> Tokens { +fn serialize_untagged_variant(generics: &syn::Generics, + ty: syn::Ty, + variant: &Variant, + item_attrs: &attr::Item) + -> Tokens { match variant.style { Style::Unit => { quote! { @@ -483,8 +424,7 @@ fn serialize_untagged_variant( let field = &variant.fields[0]; let mut field_expr = quote!(__simple_value); if let Some(path) = field.attrs.serialize_with() { - field_expr = wrap_serialize_with( - &ty, generics, field.ty, path, field_expr); + field_expr = wrap_serialize_with(&ty, generics, field.ty, path, field_expr); } quote! { @@ -492,25 +432,19 @@ fn serialize_untagged_variant( } } Style::Tuple => { - let block = serialize_tuple_variant( - TupleVariant::Untagged, - generics, - ty, - &variant.fields, - ); + let block = + serialize_tuple_variant(TupleVariant::Untagged, generics, ty, &variant.fields); quote! { { #block } } } Style::Struct => { - let block = serialize_struct_variant( - StructVariant::Untagged, - generics, - ty, - &variant.fields, - item_attrs, - ); + let block = serialize_struct_variant(StructVariant::Untagged, + generics, + ty, + &variant.fields, + item_attrs); quote! { { #block } @@ -528,28 +462,20 @@ enum TupleVariant { Untagged, } -fn serialize_tuple_variant( - context: TupleVariant, - generics: &syn::Generics, - structure_ty: syn::Ty, - fields: &[Field], -) -> Tokens { +fn serialize_tuple_variant(context: TupleVariant, + generics: &syn::Generics, + structure_ty: syn::Ty, + fields: &[Field]) + -> Tokens { let method = match context { - TupleVariant::ExternallyTagged{..} => { + TupleVariant::ExternallyTagged { .. } => { quote!(_serde::ser::SerializeTupleVariant::serialize_field) } - TupleVariant::Untagged => { - quote!(_serde::ser::SerializeTuple::serialize_element) - } + TupleVariant::Untagged => quote!(_serde::ser::SerializeTuple::serialize_element), }; - let serialize_stmts = serialize_tuple_struct_visitor( - structure_ty, - fields, - generics, - true, - method, - ); + let serialize_stmts = + serialize_tuple_struct_visitor(structure_ty, fields, generics, true, method); let len = serialize_stmts.len(); let let_mut = mut_if(len > 0); @@ -584,36 +510,25 @@ enum StructVariant<'a> { variant_index: usize, variant_name: String, }, - InternallyTagged { - tag: &'a str, - variant_name: String, - }, + InternallyTagged { tag: &'a str, variant_name: String }, Untagged, } -fn serialize_struct_variant<'a>( - context: StructVariant<'a>, - generics: &syn::Generics, - ty: syn::Ty, - fields: &[Field], - item_attrs: &attr::Item, -) -> Tokens { +fn serialize_struct_variant<'a>(context: StructVariant<'a>, + generics: &syn::Generics, + ty: syn::Ty, + fields: &[Field], + item_attrs: &attr::Item) + -> Tokens { let method = match context { - StructVariant::ExternallyTagged{..} => { + StructVariant::ExternallyTagged { .. } => { quote!(_serde::ser::SerializeStructVariant::serialize_field) } - StructVariant::InternallyTagged{..} | StructVariant::Untagged => { - quote!(_serde::ser::SerializeStruct::serialize_field) - } + StructVariant::InternallyTagged { .. } | + StructVariant::Untagged => quote!(_serde::ser::SerializeStruct::serialize_field), }; - let serialize_fields = serialize_struct_visitor( - ty.clone(), - fields, - generics, - true, - method, - ); + let serialize_fields = serialize_struct_visitor(ty.clone(), fields, generics, true, method); let item_name = item_attrs.name().serialize_name(); @@ -623,15 +538,14 @@ fn serialize_struct_variant<'a>( let let_mut = mut_if(serialized_fields.peek().is_some()); - let len = serialized_fields - .map(|field| { + let len = serialized_fields.map(|field| { let ident = field.ident.clone().expect("struct has unnamed fields"); match field.attrs.skip_serializing_if() { Some(path) => quote!(if #path(#ident) { 0 } else { 1 }), None => quote!(1), } - }) + }) .fold(quote!(0), |sum, expr| quote!(#sum + #expr)); match context { @@ -678,13 +592,12 @@ fn serialize_struct_variant<'a>( } } -fn serialize_tuple_struct_visitor( - structure_ty: syn::Ty, - fields: &[Field], - generics: &syn::Generics, - is_enum: bool, - func: Tokens, -) -> Vec { +fn serialize_tuple_struct_visitor(structure_ty: syn::Ty, + fields: &[Field], + generics: &syn::Generics, + is_enum: bool, + func: Tokens) + -> Vec { fields.iter() .enumerate() .map(|(i, field)| { @@ -696,12 +609,13 @@ fn serialize_tuple_struct_visitor( quote!(&self.#i) }; - let skip = field.attrs.skip_serializing_if() + let skip = field.attrs + .skip_serializing_if() .map(|path| quote!(#path(#field_expr))); if let Some(path) = field.attrs.serialize_with() { - field_expr = wrap_serialize_with( - &structure_ty, generics, field.ty, path, field_expr); + field_expr = + wrap_serialize_with(&structure_ty, generics, field.ty, path, field_expr); } let ser = quote! { @@ -716,13 +630,12 @@ fn serialize_tuple_struct_visitor( .collect() } -fn serialize_struct_visitor( - structure_ty: syn::Ty, - fields: &[Field], - generics: &syn::Generics, - is_enum: bool, - func: Tokens, -) -> Vec { +fn serialize_struct_visitor(structure_ty: syn::Ty, + fields: &[Field], + generics: &syn::Generics, + is_enum: bool, + func: Tokens) + -> Vec { fields.iter() .filter(|&field| !field.attrs.skip_serializing()) .map(|field| { @@ -735,12 +648,13 @@ fn serialize_struct_visitor( let key_expr = field.attrs.name().serialize_name(); - let skip = field.attrs.skip_serializing_if() + let skip = field.attrs + .skip_serializing_if() .map(|path| quote!(#path(#field_expr))); if let Some(path) = field.attrs.serialize_with() { - field_expr = wrap_serialize_with( - &structure_ty, generics, field.ty, path, field_expr) + field_expr = + wrap_serialize_with(&structure_ty, generics, field.ty, path, field_expr) } let ser = quote! { @@ -755,13 +669,12 @@ fn serialize_struct_visitor( .collect() } -fn wrap_serialize_with( - item_ty: &syn::Ty, - generics: &syn::Generics, - field_ty: &syn::Ty, - path: &syn::Path, - value: Tokens, -) -> Tokens { +fn wrap_serialize_with(item_ty: &syn::Ty, + generics: &syn::Generics, + field_ty: &syn::Ty, + path: &syn::Path, + value: Tokens) + -> Tokens { let where_clause = &generics.where_clause; let wrapper_generics = aster::from_generics(generics.clone()) @@ -771,8 +684,8 @@ fn wrap_serialize_with( let wrapper_ty = aster::path() .segment("__SerializeWith") - .with_generics(wrapper_generics.clone()) - .build() + .with_generics(wrapper_generics.clone()) + .build() .build(); quote!({ @@ -803,9 +716,5 @@ fn wrap_serialize_with( // // where we want to omit the `mut` to avoid a warning. fn mut_if(is_mut: bool) -> Option { - if is_mut { - Some(quote!(mut)) - } else { - None - } + if is_mut { Some(quote!(mut)) } else { None } } diff --git a/serde_test/src/assert.rs b/serde_test/src/assert.rs index b5e03f52..3abb87d7 100644 --- a/serde_test/src/assert.rs +++ b/serde_test/src/assert.rs @@ -8,14 +8,14 @@ use token::Token; use std::fmt::Debug; pub fn assert_tokens(value: &T, tokens: &[Token<'static>]) - where T: Serialize + Deserialize + PartialEq + Debug, + where T: Serialize + Deserialize + PartialEq + Debug { assert_ser_tokens(value, tokens); assert_de_tokens(value, tokens); } pub fn assert_ser_tokens(value: &T, tokens: &[Token]) - where T: Serialize, + where T: Serialize { let mut ser = Serializer::new(tokens.iter()); assert_eq!(Serialize::serialize(value, &mut ser), Ok(())); @@ -24,7 +24,7 @@ pub fn assert_ser_tokens(value: &T, tokens: &[Token]) /// Expect an error serializing `T`. pub fn assert_ser_tokens_error(value: &T, tokens: &[Token], error: Error) - where T: Serialize + PartialEq + Debug, + where T: Serialize + PartialEq + Debug { let mut ser = Serializer::new(tokens.iter()); let v: Result<(), Error> = Serialize::serialize(value, &mut ser); @@ -33,7 +33,7 @@ pub fn assert_ser_tokens_error(value: &T, tokens: &[Token], error: Error) } pub fn assert_de_tokens(value: &T, tokens: &[Token<'static>]) - where T: Deserialize + PartialEq + Debug, + where T: Deserialize + PartialEq + Debug { let mut de = Deserializer::new(tokens.to_vec().into_iter()); let v: Result = Deserialize::deserialize(&mut de); @@ -43,7 +43,7 @@ pub fn assert_de_tokens(value: &T, tokens: &[Token<'static>]) /// Expect an error deserializing tokens into a `T`. pub fn assert_de_tokens_error(tokens: &[Token<'static>], error: Error) - where T: Deserialize + PartialEq + Debug, + where T: Deserialize + PartialEq + Debug { let mut de = Deserializer::new(tokens.to_vec().into_iter()); let v: Result = Deserialize::deserialize(&mut de); diff --git a/serde_test/src/de.rs b/serde_test/src/de.rs index 138ed0cd..816c7d37 100644 --- a/serde_test/src/de.rs +++ b/serde_test/src/de.rs @@ -1,33 +1,23 @@ use std::iter; -use serde::de::{ - self, - Deserialize, - DeserializeSeed, - EnumVisitor, - MapVisitor, - SeqVisitor, - VariantVisitor, - Visitor, -}; +use serde::de::{self, Deserialize, DeserializeSeed, EnumVisitor, MapVisitor, SeqVisitor, + VariantVisitor, Visitor}; use serde::de::value::ValueDeserializer; use error::Error; use token::Token; pub struct Deserializer - where I: Iterator>, + where I: Iterator> { tokens: iter::Peekable, } impl Deserializer - where I: Iterator>, + where I: Iterator> { pub fn new(tokens: I) -> Deserializer { - Deserializer { - tokens: tokens.peekable(), - } + Deserializer { tokens: tokens.peekable() } } pub fn next_token(&mut self) -> Option> { @@ -47,8 +37,13 @@ impl Deserializer } } - fn visit_seq(&mut self, len: Option, sep: Token<'static>, end: Token<'static>, visitor: V) -> Result - where V: Visitor, + fn visit_seq(&mut self, + len: Option, + sep: Token<'static>, + end: Token<'static>, + visitor: V) + -> Result + where V: Visitor { let value = try!(visitor.visit_seq(DeserializerSeqVisitor { de: self, @@ -60,8 +55,13 @@ impl Deserializer Ok(value) } - fn visit_map(&mut self, len: Option, sep: Token<'static>, end: Token<'static>, visitor: V) -> Result - where V: Visitor, + fn visit_map(&mut self, + len: Option, + sep: Token<'static>, + end: Token<'static>, + visitor: V) + -> Result + where V: Visitor { let value = try!(visitor.visit_map(DeserializerMapVisitor { de: self, @@ -75,7 +75,7 @@ impl Deserializer } impl<'a, I> de::Deserializer for &'a mut Deserializer - where I: Iterator>, + where I: Iterator> { type Error = Error; @@ -85,7 +85,7 @@ impl<'a, I> de::Deserializer for &'a mut Deserializer } fn deserialize(self, visitor: V) -> Result - where V: Visitor, + where V: Visitor { match self.tokens.next() { Some(Token::Bool(v)) => visitor.visit_bool(v), @@ -118,7 +118,10 @@ impl<'a, I> de::Deserializer for &'a mut Deserializer self.visit_seq(Some(len), Token::TupleSep, Token::TupleEnd, visitor) } Some(Token::TupleStructStart(_, len)) => { - self.visit_seq(Some(len), Token::TupleStructSep, Token::TupleStructEnd, visitor) + self.visit_seq(Some(len), + Token::TupleStructSep, + Token::TupleStructEnd, + visitor) } Some(Token::MapStart(len)) => { self.visit_map(len, Token::MapSep, Token::MapEnd, visitor) @@ -134,10 +137,11 @@ impl<'a, I> de::Deserializer for &'a mut Deserializer /// Hook into `Option` deserializing so we can treat `Unit` as a /// `None`, or a regular value as `Some(value)`. fn deserialize_option(self, visitor: V) -> Result - where V: Visitor, + where V: Visitor { match self.tokens.peek() { - Some(&Token::Unit) | Some(&Token::Option(false)) => { + Some(&Token::Unit) | + Some(&Token::Option(false)) => { self.tokens.next(); visitor.visit_none() } @@ -151,26 +155,23 @@ impl<'a, I> de::Deserializer for &'a mut Deserializer } fn deserialize_enum(self, - name: &str, - _variants: &'static [&'static str], - visitor: V) -> Result - where V: Visitor, + name: &str, + _variants: &'static [&'static str], + visitor: V) + -> Result + where V: Visitor { match self.tokens.peek() { Some(&Token::EnumStart(n)) if name == n => { self.tokens.next(); - visitor.visit_enum(DeserializerEnumVisitor { - de: self, - }) + visitor.visit_enum(DeserializerEnumVisitor { de: self }) } - Some(&Token::EnumUnit(n, _)) - | Some(&Token::EnumNewType(n, _)) - | Some(&Token::EnumSeqStart(n, _, _)) - | Some(&Token::EnumMapStart(n, _, _)) if name == n => { - visitor.visit_enum(DeserializerEnumVisitor { - de: self, - }) + Some(&Token::EnumUnit(n, _)) | + Some(&Token::EnumNewType(n, _)) | + Some(&Token::EnumSeqStart(n, _, _)) | + Some(&Token::EnumMapStart(n, _, _)) if name == n => { + visitor.visit_enum(DeserializerEnumVisitor { de: self }) } Some(_) => { let token = self.tokens.next().unwrap(); @@ -181,7 +182,7 @@ impl<'a, I> de::Deserializer for &'a mut Deserializer } fn deserialize_unit_struct(self, name: &str, visitor: V) -> Result - where V: Visitor, + where V: Visitor { match self.tokens.peek() { Some(&Token::UnitStruct(n)) => { @@ -197,10 +198,8 @@ impl<'a, I> de::Deserializer for &'a mut Deserializer } } - fn deserialize_newtype_struct(self, - name: &str, - visitor: V) -> Result - where V: Visitor, + fn deserialize_newtype_struct(self, name: &str, visitor: V) -> Result + where V: Visitor { match self.tokens.peek() { Some(&Token::StructNewType(n)) => { @@ -216,10 +215,8 @@ impl<'a, I> de::Deserializer for &'a mut Deserializer } } - fn deserialize_seq_fixed_size(self, - len: usize, - visitor: V) -> Result - where V: Visitor, + fn deserialize_seq_fixed_size(self, len: usize, visitor: V) -> Result + where V: Visitor { match self.tokens.peek() { Some(&Token::SeqArrayStart(_)) => { @@ -231,13 +228,12 @@ impl<'a, I> de::Deserializer for &'a mut Deserializer } } - fn deserialize_tuple(self, - len: usize, - visitor: V) -> Result - where V: Visitor, + fn deserialize_tuple(self, len: usize, visitor: V) -> Result + where V: Visitor { match self.tokens.peek() { - Some(&Token::Unit) | Some(&Token::UnitStruct(_)) => { + Some(&Token::Unit) | + Some(&Token::UnitStruct(_)) => { self.tokens.next(); visitor.visit_unit() } @@ -255,7 +251,10 @@ impl<'a, I> de::Deserializer for &'a mut Deserializer } Some(&Token::TupleStructStart(_, _)) => { self.tokens.next(); - self.visit_seq(Some(len), Token::TupleStructSep, Token::TupleStructEnd, visitor) + self.visit_seq(Some(len), + Token::TupleStructSep, + Token::TupleStructEnd, + visitor) } Some(_) => self.deserialize(visitor), None => Err(Error::EndOfTokens), @@ -265,8 +264,9 @@ impl<'a, I> de::Deserializer for &'a mut Deserializer fn deserialize_tuple_struct(self, name: &str, len: usize, - visitor: V) -> Result - where V: Visitor, + visitor: V) + -> Result + where V: Visitor { match self.tokens.peek() { Some(&Token::Unit) => { @@ -296,7 +296,10 @@ impl<'a, I> de::Deserializer for &'a mut Deserializer Some(&Token::TupleStructStart(n, _)) => { self.tokens.next(); if name == n { - self.visit_seq(Some(len), Token::TupleStructSep, Token::TupleStructEnd, visitor) + self.visit_seq(Some(len), + Token::TupleStructSep, + Token::TupleStructEnd, + visitor) } else { Err(Error::InvalidName(n)) } @@ -309,14 +312,18 @@ impl<'a, I> de::Deserializer for &'a mut Deserializer fn deserialize_struct(self, name: &str, fields: &'static [&'static str], - visitor: V) -> Result - where V: Visitor, + visitor: V) + -> Result + where V: Visitor { match self.tokens.peek() { Some(&Token::StructStart(n, _)) => { self.tokens.next(); if name == n { - self.visit_map(Some(fields.len()), Token::StructSep, Token::StructEnd, visitor) + self.visit_map(Some(fields.len()), + Token::StructSep, + Token::StructEnd, + visitor) } else { Err(Error::InvalidName(n)) } @@ -333,7 +340,9 @@ impl<'a, I> de::Deserializer for &'a mut Deserializer ////////////////////////////////////////////////////////////////////////// -struct DeserializerSeqVisitor<'a, I: 'a> where I: Iterator> { +struct DeserializerSeqVisitor<'a, I: 'a> + where I: Iterator> +{ de: &'a mut Deserializer, len: Option, sep: Token<'static>, @@ -341,12 +350,12 @@ struct DeserializerSeqVisitor<'a, I: 'a> where I: Iterator> } impl<'a, I> SeqVisitor for DeserializerSeqVisitor<'a, I> - where I: Iterator>, + where I: Iterator> { type Error = Error; fn visit_seed(&mut self, seed: T) -> Result, Error> - where T: DeserializeSeed, + where T: DeserializeSeed { if self.de.tokens.peek() == Some(&self.end) { return Ok(None); @@ -369,7 +378,9 @@ impl<'a, I> SeqVisitor for DeserializerSeqVisitor<'a, I> ////////////////////////////////////////////////////////////////////////// -struct DeserializerMapVisitor<'a, I: 'a> where I: Iterator> { +struct DeserializerMapVisitor<'a, I: 'a> + where I: Iterator> +{ de: &'a mut Deserializer, len: Option, sep: Token<'static>, @@ -377,12 +388,12 @@ struct DeserializerMapVisitor<'a, I: 'a> where I: Iterator> } impl<'a, I> MapVisitor for DeserializerMapVisitor<'a, I> - where I: Iterator>, + where I: Iterator> { type Error = Error; fn visit_key_seed(&mut self, seed: K) -> Result, Error> - where K: DeserializeSeed, + where K: DeserializeSeed { if self.de.tokens.peek() == Some(&self.end) { return Ok(None); @@ -398,7 +409,7 @@ impl<'a, I> MapVisitor for DeserializerMapVisitor<'a, I> } fn visit_value_seed(&mut self, seed: V) -> Result - where V: DeserializeSeed, + where V: DeserializeSeed { seed.deserialize(&mut *self.de) } @@ -411,24 +422,26 @@ impl<'a, I> MapVisitor for DeserializerMapVisitor<'a, I> ////////////////////////////////////////////////////////////////////////// -struct DeserializerEnumVisitor<'a, I: 'a> where I: Iterator> { +struct DeserializerEnumVisitor<'a, I: 'a> + where I: Iterator> +{ de: &'a mut Deserializer, } impl<'a, I> EnumVisitor for DeserializerEnumVisitor<'a, I> - where I: Iterator>, + where I: Iterator> { type Error = Error; type Variant = Self; fn visit_variant_seed(self, seed: V) -> Result<(V::Value, Self), Error> - where V: DeserializeSeed, + where V: DeserializeSeed { match self.de.tokens.peek() { - Some(&Token::EnumUnit(_, v)) - | Some(&Token::EnumNewType(_, v)) - | Some(&Token::EnumSeqStart(_, v, _)) - | Some(&Token::EnumMapStart(_, v, _)) => { + Some(&Token::EnumUnit(_, v)) | + Some(&Token::EnumNewType(_, v)) | + Some(&Token::EnumSeqStart(_, v, _)) | + Some(&Token::EnumMapStart(_, v, _)) => { let de = v.into_deserializer(); let value = try!(seed.deserialize(de)); Ok((value, self)) @@ -443,7 +456,7 @@ impl<'a, I> EnumVisitor for DeserializerEnumVisitor<'a, I> } impl<'a, I> VariantVisitor for DeserializerEnumVisitor<'a, I> - where I: Iterator> + where I: Iterator> { type Error = Error; @@ -453,32 +466,26 @@ impl<'a, I> VariantVisitor for DeserializerEnumVisitor<'a, I> self.de.tokens.next(); Ok(()) } - Some(_) => { - Deserialize::deserialize(self.de) - } + Some(_) => Deserialize::deserialize(self.de), None => Err(Error::EndOfTokens), } } fn visit_newtype_seed(self, seed: T) -> Result - where T: DeserializeSeed, + where T: DeserializeSeed { match self.de.tokens.peek() { Some(&Token::EnumNewType(_, _)) => { self.de.tokens.next(); seed.deserialize(self.de) } - Some(_) => { - seed.deserialize(self.de) - } + Some(_) => seed.deserialize(self.de), None => Err(Error::EndOfTokens), } } - fn visit_tuple(self, - len: usize, - visitor: V) -> Result - where V: Visitor, + fn visit_tuple(self, len: usize, visitor: V) -> Result + where V: Visitor { match self.de.tokens.peek() { Some(&Token::EnumSeqStart(_, _, enum_len)) => { @@ -499,24 +506,23 @@ impl<'a, I> VariantVisitor for DeserializerEnumVisitor<'a, I> Err(Error::UnexpectedToken(token)) } } - Some(_) => { - de::Deserializer::deserialize(self.de, visitor) - } + Some(_) => de::Deserializer::deserialize(self.de, visitor), None => Err(Error::EndOfTokens), } } - fn visit_struct(self, - fields: &'static [&'static str], - visitor: V) -> Result - where V: Visitor, + fn visit_struct(self, fields: &'static [&'static str], visitor: V) -> Result + where V: Visitor { match self.de.tokens.peek() { Some(&Token::EnumMapStart(_, _, enum_len)) => { let token = self.de.tokens.next().unwrap(); if fields.len() == enum_len { - self.de.visit_map(Some(fields.len()), Token::EnumMapSep, Token::EnumMapEnd, visitor) + self.de.visit_map(Some(fields.len()), + Token::EnumMapSep, + Token::EnumMapEnd, + visitor) } else { Err(Error::UnexpectedToken(token)) } @@ -530,9 +536,7 @@ impl<'a, I> VariantVisitor for DeserializerEnumVisitor<'a, I> Err(Error::UnexpectedToken(token)) } } - Some(_) => { - de::Deserializer::deserialize(self.de, visitor) - } + Some(_) => de::Deserializer::deserialize(self.de, visitor), None => Err(Error::EndOfTokens), } } diff --git a/serde_test/src/lib.rs b/serde_test/src/lib.rs index 53f966f6..29668e8c 100644 --- a/serde_test/src/lib.rs +++ b/serde_test/src/lib.rs @@ -2,13 +2,8 @@ extern crate serde; mod assert; -pub use assert::{ - assert_tokens, - assert_ser_tokens, - assert_ser_tokens_error, - assert_de_tokens, - assert_de_tokens_error, -}; +pub use assert::{assert_tokens, assert_ser_tokens, assert_ser_tokens_error, assert_de_tokens, + assert_de_tokens_error}; mod ser; pub use ser::Serializer; diff --git a/serde_test/src/ser.rs b/serde_test/src/ser.rs index 4327733f..620976a3 100644 --- a/serde_test/src/ser.rs +++ b/serde_test/src/ser.rs @@ -6,14 +6,14 @@ use error::Error; use token::Token; pub struct Serializer<'a, I> - where I: Iterator>, + where I: Iterator> { tokens: I, phantom: PhantomData<&'a Token<'a>>, } impl<'a, I> Serializer<'a, I> - where I: Iterator>, + where I: Iterator> { pub fn new(tokens: I) -> Serializer<'a, I> { Serializer { @@ -28,7 +28,7 @@ impl<'a, I> Serializer<'a, I> } impl<'s, 'a, I> ser::Serializer for &'s mut Serializer<'a, I> - where I: Iterator>, + where I: Iterator> { type Ok = (); type Error = Error; @@ -124,15 +124,14 @@ impl<'s, 'a, I> ser::Serializer for &'s mut Serializer<'a, I> fn serialize_unit_variant(self, name: &str, _variant_index: usize, - variant: &str) -> Result<(), Error> { + variant: &str) + -> Result<(), Error> { assert_eq!(self.tokens.next(), Some(&Token::EnumUnit(name, variant))); Ok(()) } - fn serialize_newtype_struct(self, - name: &'static str, - value: &T) -> Result<(), Error> - where T: Serialize, + fn serialize_newtype_struct(self, name: &'static str, value: &T) -> Result<(), Error> + where T: Serialize { assert_eq!(self.tokens.next(), Some(&Token::StructNewType(name))); value.serialize(self) @@ -142,8 +141,9 @@ impl<'s, 'a, I> ser::Serializer for &'s mut Serializer<'a, I> name: &str, _variant_index: usize, variant: &str, - value: &T) -> Result<(), Error> - where T: Serialize, + value: &T) + -> Result<(), Error> + where T: Serialize { assert_eq!(self.tokens.next(), Some(&Token::EnumNewType(name, variant))); value.serialize(self) @@ -155,7 +155,7 @@ impl<'s, 'a, I> ser::Serializer for &'s mut Serializer<'a, I> } fn serialize_some(self, value: &T) -> Result<(), Error> - where T: Serialize, + where T: Serialize { assert_eq!(self.tokens.next(), Some(&Token::Option(true))); value.serialize(self) @@ -177,7 +177,8 @@ impl<'s, 'a, I> ser::Serializer for &'s mut Serializer<'a, I> } fn serialize_tuple_struct(self, name: &'static str, len: usize) -> Result { - assert_eq!(self.tokens.next(), Some(&Token::TupleStructStart(name, len))); + assert_eq!(self.tokens.next(), + Some(&Token::TupleStructStart(name, len))); Ok(self) } @@ -185,9 +186,10 @@ impl<'s, 'a, I> ser::Serializer for &'s mut Serializer<'a, I> name: &str, _variant_index: usize, variant: &str, - len: usize) -> Result - { - assert_eq!(self.tokens.next(), Some(&Token::EnumSeqStart(name, variant, len))); + len: usize) + -> Result { + assert_eq!(self.tokens.next(), + Some(&Token::EnumSeqStart(name, variant, len))); Ok(self) } @@ -205,15 +207,16 @@ impl<'s, 'a, I> ser::Serializer for &'s mut Serializer<'a, I> name: &str, _variant_index: usize, variant: &str, - len: usize) -> Result - { - assert_eq!(self.tokens.next(), Some(&Token::EnumMapStart(name, variant, len))); + len: usize) + -> Result { + assert_eq!(self.tokens.next(), + Some(&Token::EnumMapStart(name, variant, len))); Ok(self) } } impl<'s, 'a, I> ser::SerializeSeq for &'s mut Serializer<'a, I> - where I: Iterator>, + where I: Iterator> { type Ok = (); type Error = Error; @@ -232,7 +235,7 @@ impl<'s, 'a, I> ser::SerializeSeq for &'s mut Serializer<'a, I> } impl<'s, 'a, I> ser::SerializeTuple for &'s mut Serializer<'a, I> - where I: Iterator>, + where I: Iterator> { type Ok = (); type Error = Error; @@ -251,7 +254,7 @@ impl<'s, 'a, I> ser::SerializeTuple for &'s mut Serializer<'a, I> } impl<'s, 'a, I> ser::SerializeTupleStruct for &'s mut Serializer<'a, I> - where I: Iterator>, + where I: Iterator> { type Ok = (); type Error = Error; @@ -270,7 +273,7 @@ impl<'s, 'a, I> ser::SerializeTupleStruct for &'s mut Serializer<'a, I> } impl<'s, 'a, I> ser::SerializeTupleVariant for &'s mut Serializer<'a, I> - where I: Iterator>, + where I: Iterator> { type Ok = (); type Error = Error; @@ -289,17 +292,21 @@ impl<'s, 'a, I> ser::SerializeTupleVariant for &'s mut Serializer<'a, I> } impl<'s, 'a, I> ser::SerializeMap for &'s mut Serializer<'a, I> - where I: Iterator>, + where I: Iterator> { type Ok = (); type Error = Error; - fn serialize_key(&mut self, key: &T) -> Result<(), Self::Error> where T: Serialize { + fn serialize_key(&mut self, key: &T) -> Result<(), Self::Error> + where T: Serialize + { assert_eq!(self.tokens.next(), Some(&Token::MapSep)); key.serialize(&mut **self) } - fn serialize_value(&mut self, value: &T) -> Result<(), Self::Error> where T: Serialize { + fn serialize_value(&mut self, value: &T) -> Result<(), Self::Error> + where T: Serialize + { value.serialize(&mut **self) } @@ -310,12 +317,17 @@ impl<'s, 'a, I> ser::SerializeMap for &'s mut Serializer<'a, I> } impl<'s, 'a, I> ser::SerializeStruct for &'s mut Serializer<'a, I> - where I: Iterator>, + where I: Iterator> { type Ok = (); type Error = Error; - fn serialize_field(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error> where T: Serialize { + fn serialize_field(&mut self, + key: &'static str, + value: &T) + -> Result<(), Self::Error> + where T: Serialize + { assert_eq!(self.tokens.next(), Some(&Token::StructSep)); try!(key.serialize(&mut **self)); value.serialize(&mut **self) @@ -328,12 +340,17 @@ impl<'s, 'a, I> ser::SerializeStruct for &'s mut Serializer<'a, I> } impl<'s, 'a, I> ser::SerializeStructVariant for &'s mut Serializer<'a, I> - where I: Iterator>, + where I: Iterator> { type Ok = (); type Error = Error; - fn serialize_field(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error> where T: Serialize { + fn serialize_field(&mut self, + key: &'static str, + value: &T) + -> Result<(), Self::Error> + where T: Serialize + { assert_eq!(self.tokens.next(), Some(&Token::EnumMapSep)); try!(key.serialize(&mut **self)); value.serialize(&mut **self)