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