mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-06-13 20:41:02 +00:00
Fix differences in the generated code
This commit is contained in:
@@ -22,8 +22,8 @@ with-syn = []
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clippy = { version = "^0.*", optional = true }
|
clippy = { version = "^0.*", optional = true }
|
||||||
quote = "0.1"
|
quote = "0.2"
|
||||||
serde_codegen_internals = { version = "=0.8.9", default-features = false, path = "../serde_codegen_internals" }
|
serde_codegen_internals = { version = "=0.8.9", default-features = false, path = "../serde_codegen_internals" }
|
||||||
syn = { version = "0.7.1", features = ["aster", "visit"] }
|
syn = { version = "0.8", features = ["aster", "visit"] }
|
||||||
syntex = { version = "^0.44.0", optional = true }
|
syntex = { version = "^0.44.0", optional = true }
|
||||||
syntex_syntax = { version = "^0.44.0", optional = true }
|
syntex_syntax = { version = "^0.44.0", optional = true }
|
||||||
|
|||||||
+18
-13
@@ -36,9 +36,7 @@ pub fn expand_derive_deserialize(item: &syn::MacroInput) -> Result<Tokens, Strin
|
|||||||
impl #impl_generics _serde::de::Deserialize for #ty #where_clause {
|
impl #impl_generics _serde::de::Deserialize for #ty #where_clause {
|
||||||
fn deserialize<__D>(deserializer: &mut __D) -> ::std::result::Result<#ty, __D::Error>
|
fn deserialize<__D>(deserializer: &mut __D) -> ::std::result::Result<#ty, __D::Error>
|
||||||
where __D: _serde::de::Deserializer
|
where __D: _serde::de::Deserializer
|
||||||
{
|
#body
|
||||||
#body
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
@@ -151,6 +149,8 @@ fn deserialize_visitor(generics: &syn::Generics) -> (Tokens, Tokens, Tokens) {
|
|||||||
quote!(__Visitor),
|
quote!(__Visitor),
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
|
let where_clause = &generics.where_clause;
|
||||||
|
|
||||||
let num_phantoms = generics.lifetimes.len() + generics.ty_params.len();
|
let num_phantoms = generics.lifetimes.len() + generics.ty_params.len();
|
||||||
|
|
||||||
let phantom_types = generics.lifetimes.iter()
|
let phantom_types = generics.lifetimes.iter()
|
||||||
@@ -190,7 +190,7 @@ fn deserialize_visitor(generics: &syn::Generics) -> (Tokens, Tokens, Tokens) {
|
|||||||
|
|
||||||
(
|
(
|
||||||
quote! {
|
quote! {
|
||||||
struct __Visitor #generics ( #(phantom_types),* );
|
struct __Visitor #generics ( #(phantom_types),* ) #where_clause;
|
||||||
},
|
},
|
||||||
quote!(__Visitor <#(all_params),*> ),
|
quote!(__Visitor <#(all_params),*> ),
|
||||||
quote!(__Visitor #ty_param_idents ( #(phantom_exprs),* )),
|
quote!(__Visitor #ty_param_idents ( #(phantom_exprs),* )),
|
||||||
@@ -204,7 +204,7 @@ fn deserialize_unit_struct(
|
|||||||
) -> Tokens {
|
) -> Tokens {
|
||||||
let type_name = item_attrs.name().deserialize_name();
|
let type_name = item_attrs.name().deserialize_name();
|
||||||
|
|
||||||
quote! {
|
quote!({
|
||||||
struct __Visitor;
|
struct __Visitor;
|
||||||
|
|
||||||
impl _serde::de::Visitor for __Visitor {
|
impl _serde::de::Visitor for __Visitor {
|
||||||
@@ -227,7 +227,7 @@ fn deserialize_unit_struct(
|
|||||||
}
|
}
|
||||||
|
|
||||||
deserializer.deserialize_unit_struct(#type_name, __Visitor)
|
deserializer.deserialize_unit_struct(#type_name, __Visitor)
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize_tuple(
|
fn deserialize_tuple(
|
||||||
@@ -537,7 +537,7 @@ fn deserialize_item_enum(
|
|||||||
|
|
||||||
let (visitor_item, visitor_ty, visitor_expr) = deserialize_visitor(impl_generics);
|
let (visitor_item, visitor_ty, visitor_expr) = deserialize_visitor(impl_generics);
|
||||||
|
|
||||||
quote! {
|
quote!({
|
||||||
#variant_visitor
|
#variant_visitor
|
||||||
|
|
||||||
#visitor_item
|
#visitor_item
|
||||||
@@ -557,7 +557,7 @@ fn deserialize_item_enum(
|
|||||||
#variants_stmt
|
#variants_stmt
|
||||||
|
|
||||||
deserializer.deserialize_enum(#type_name, VARIANTS, #visitor_expr)
|
deserializer.deserialize_enum(#type_name, VARIANTS, #visitor_expr)
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize_variant(
|
fn deserialize_variant(
|
||||||
@@ -628,9 +628,11 @@ fn deserialize_newtype_variant(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
quote! {
|
// The outer braces are unnecessary but quasi used to have them. We can
|
||||||
Ok(#type_ident::#variant_ident(#visit)),
|
// remove them separately from the syn conversion.
|
||||||
}
|
quote!({
|
||||||
|
Ok(#type_ident::#variant_ident(#visit))
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
fn deserialize_field_visitor(
|
fn deserialize_field_visitor(
|
||||||
@@ -861,11 +863,14 @@ fn deserialize_map(
|
|||||||
Some(path) => {
|
Some(path) => {
|
||||||
let (wrapper, wrapper_impl, wrapper_ty) = wrap_deserialize_with(
|
let (wrapper, wrapper_impl, wrapper_ty) = wrap_deserialize_with(
|
||||||
type_ident, impl_generics, field.ty, path);
|
type_ident, impl_generics, field.ty, path);
|
||||||
quote!({
|
// The outer parentheses are redundant but quasi used to put
|
||||||
|
// them in. We can remove them separately from the syn
|
||||||
|
// conversion.
|
||||||
|
quote!(({
|
||||||
#wrapper
|
#wrapper
|
||||||
#wrapper_impl
|
#wrapper_impl
|
||||||
try!(visitor.visit_value::<#wrapper_ty>()).value
|
try!(visitor.visit_value::<#wrapper_ty>()).value
|
||||||
})
|
}))
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
quote! {
|
quote! {
|
||||||
|
|||||||
@@ -279,7 +279,9 @@ fn serialize_variant(
|
|||||||
);
|
);
|
||||||
|
|
||||||
quote! {
|
quote! {
|
||||||
#type_ident::#variant_ident(ref __simple_value) => #block,
|
// The braces are unnecessary but quasi used to put them in. We
|
||||||
|
// can remove them separately from the syn conversion.
|
||||||
|
#type_ident::#variant_ident(ref __simple_value) => { #block },
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
Style::Tuple => {
|
Style::Tuple => {
|
||||||
@@ -447,6 +449,7 @@ fn serialize_tuple_struct_visitor(
|
|||||||
let id = aster::id(format!("__field{}", i));
|
let id = aster::id(format!("__field{}", i));
|
||||||
quote!(#id)
|
quote!(#id)
|
||||||
} else {
|
} else {
|
||||||
|
let i = aster::id(i);
|
||||||
quote!(&self.#i)
|
quote!(&self.#i)
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -459,11 +462,15 @@ fn serialize_tuple_struct_visitor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let ser = quote! {
|
let ser = quote! {
|
||||||
try!(_serializer.#func(&mut __serde_state, #field_expr));
|
// This line should end in a semicolon but quasi used to behave
|
||||||
|
// differently between skipped and non-skipped so I have
|
||||||
|
// preserved that behavior. We can update it separately from the
|
||||||
|
// syn conversion.
|
||||||
|
try!(_serializer.#func(&mut __serde_state, #field_expr))
|
||||||
};
|
};
|
||||||
|
|
||||||
match skip {
|
match skip {
|
||||||
None => ser,
|
None => quote!(#ser;),
|
||||||
Some(skip) => quote!(if !#skip { #ser }),
|
Some(skip) => quote!(if !#skip { #ser }),
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@@ -498,11 +505,15 @@ fn serialize_struct_visitor(
|
|||||||
}
|
}
|
||||||
|
|
||||||
let ser = quote! {
|
let ser = quote! {
|
||||||
try!(_serializer.#func(&mut __serde_state, #key_expr, #field_expr));
|
// This line should end in a semicolon but quasi used to behave
|
||||||
|
// differently between skipped and non-skipped so I have
|
||||||
|
// preserved that behavior. We can update it separately from the
|
||||||
|
// syn conversion.
|
||||||
|
try!(_serializer.#func(&mut __serde_state, #key_expr, #field_expr))
|
||||||
};
|
};
|
||||||
|
|
||||||
match skip {
|
match skip {
|
||||||
None => ser,
|
None => quote!(#ser;),
|
||||||
Some(skip) => quote!(if !#skip { #ser }),
|
Some(skip) => quote!(if !#skip { #ser }),
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -15,4 +15,4 @@ unstable-testing = ["clippy"]
|
|||||||
|
|
||||||
[dependencies]
|
[dependencies]
|
||||||
clippy = { version = "^0.*", optional = true }
|
clippy = { version = "^0.*", optional = true }
|
||||||
syn = "0.7.1"
|
syn = "0.8"
|
||||||
|
|||||||
Reference in New Issue
Block a user