mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-26 05:07:56 +00:00
Improve Serialize of adjacently tagged newtype variants
The existing implementation was unnecessarily complicated.
struct __AdjacentlyTagged<'__a> {
data: (&'__a String,),
phantom: _serde::export::PhantomData<AdjacentlyTagged>,
}
impl<'__a> _serde::Serialize for __AdjacentlyTagged<'__a> {
fn serialize<__S>(
&self,
__serializer: __S,
) -> _serde::export::Result<__S::Ok, __S::Error>
where
__S: _serde::Serializer,
{
let (__field0,) = self.data;
_serde::Serialize::serialize(__field0, __serializer)
}
}
_serde::ser::SerializeStruct::serialize_field(
&mut __struct,
"content",
&__AdjacentlyTagged {
data: (__field0,),
phantom: _serde::export::PhantomData::<AdjacentlyTagged>,
},
)?;
Instead the new implementation does simply:
_serde::ser::SerializeStruct::serialize_field(
&mut __struct,
"content",
__field0,
)?;
This commit is contained in:
@@ -596,9 +596,15 @@ fn serialize_adjacently_tagged_variant(
|
||||
field_expr = wrap_serialize_field_with(params, field.ty, path, &field_expr);
|
||||
}
|
||||
|
||||
quote_expr! {
|
||||
_serde::Serialize::serialize(#field_expr, __serializer)
|
||||
}
|
||||
return quote_block! {
|
||||
let mut __struct = try!(_serde::Serializer::serialize_struct(
|
||||
__serializer, #type_name, 2));
|
||||
try!(_serde::ser::SerializeStruct::serialize_field(
|
||||
&mut __struct, #tag, #variant_name));
|
||||
try!(_serde::ser::SerializeStruct::serialize_field(
|
||||
&mut __struct, #content, #field_expr));
|
||||
_serde::ser::SerializeStruct::end(__struct)
|
||||
};
|
||||
}
|
||||
Style::Tuple => {
|
||||
serialize_tuple_variant(TupleVariant::Untagged, params, &variant.fields)
|
||||
|
||||
Reference in New Issue
Block a user