Further simplify variant serialization patterns

This commit is contained in:
David Tolnay
2016-12-24 12:26:02 -05:00
parent a020cceed8
commit 57d3fce0c6
+6 -15
View File
@@ -308,12 +308,8 @@ fn serialize_variant(
} }
}, },
Style::Tuple => { Style::Tuple => {
let field_names: Vec<Tokens> = (0 .. variant.fields.len()) let field_names = (0 .. variant.fields.len())
.map(|i| { .map(|i| aster::id(format!("__field{}", i)));
let id = aster::id(format!("__field{}", i));
quote!(ref #id)
})
.collect();
let block = serialize_tuple_variant( let block = serialize_tuple_variant(
type_name, type_name,
@@ -325,17 +321,12 @@ fn serialize_variant(
); );
quote! { quote! {
#type_ident::#variant_ident(#(#field_names),*) => { #block } #type_ident::#variant_ident(#(ref #field_names),*) => { #block }
} }
} }
Style::Struct => { Style::Struct => {
let fields = variant.fields.iter().map(|field| { let fields = variant.fields.iter()
let id = match field.ident { .map(|f| f.ident.clone().expect("struct variant has unnamed fields"));
Some(ref name) => name.clone(),
None => panic!("struct variant has unnamed fields"),
};
quote!(ref #id)
});
let block = serialize_struct_variant( let block = serialize_struct_variant(
variant_index, variant_index,
@@ -347,7 +338,7 @@ fn serialize_variant(
); );
quote! { quote! {
#type_ident::#variant_ident { #(#fields),* } => { #block } #type_ident::#variant_ident { #(ref #fields),* } => { #block }
} }
} }
} }