summaryrefslogtreecommitdiff
path: root/bzipper_macros/src/impls
diff options
context:
space:
mode:
Diffstat (limited to 'bzipper_macros/src/impls')
-rw-r--r--bzipper_macros/src/impls/deserialise_enum.rs34
-rw-r--r--bzipper_macros/src/impls/serialise_enum.rs46
2 files changed, 36 insertions, 44 deletions
diff --git a/bzipper_macros/src/impls/deserialise_enum.rs b/bzipper_macros/src/impls/deserialise_enum.rs
index 7bf0220..7065c86 100644
--- a/bzipper_macros/src/impls/deserialise_enum.rs
+++ b/bzipper_macros/src/impls/deserialise_enum.rs
@@ -35,29 +35,25 @@ pub fn deserialise_enum(data: &DataEnum) -> TokenStream {
let discriminant = Discriminant::unwrap_from(index);
- let block = if matches!(variant.fields, Fields::Unit) {
- quote! { Self }
- } else {
- let mut chain_commands = Punctuated::<TokenStream, Token![,]>::new();
+ let mut chain_commands = Punctuated::<TokenStream, Token![,]>::new();
- for field in &variant.fields {
- let field_ty = &field.ty;
+ for field in &variant.fields {
+ let field_ty = &field.ty;
- let command = field.ident
- .as_ref()
- .map_or_else(
- || quote! { stream.take::<#field_ty>()? },
- |field_name| quote! { #field_name: stream.take::<#field_ty>()? }
- );
+ let command = field.ident
+ .as_ref()
+ .map_or_else(
+ || quote! { stream.take::<#field_ty>()? },
+ |field_name| quote! { #field_name: stream.take::<#field_ty>()? }
+ );
- chain_commands.push(command);
- }
+ chain_commands.push(command);
+ }
- match variant.fields {
- Fields::Named( ..) => quote! { Self::#variant_name { #chain_commands } },
- Fields::Unnamed(..) => quote! { Self::#variant_name(#chain_commands) },
- Fields::Unit => unreachable!(),
- }
+ let block = match variant.fields {
+ Fields::Named( ..) => quote! { Self::#variant_name { #chain_commands } },
+ Fields::Unnamed(..) => quote! { Self::#variant_name(#chain_commands) },
+ Fields::Unit => quote! { Self::#variant_name },
};
match_arms.push(quote! { #discriminant => #block });
diff --git a/bzipper_macros/src/impls/serialise_enum.rs b/bzipper_macros/src/impls/serialise_enum.rs
index 8f0693a..a554351 100644
--- a/bzipper_macros/src/impls/serialise_enum.rs
+++ b/bzipper_macros/src/impls/serialise_enum.rs
@@ -35,7 +35,7 @@ pub fn serialise_enum(data: &DataEnum) -> TokenStream {
for (index, variant) in data.variants.iter().enumerate() {
let mut serialised_size = Punctuated::<TokenStream, Token![+]>::new();
- let name = &variant.ident;
+ let variant_name = &variant.ident;
let discriminant = u32::try_from(index)
.expect("enumeration discriminants must be representable in `u32`");
@@ -43,38 +43,34 @@ pub fn serialise_enum(data: &DataEnum) -> TokenStream {
// Discriminant size:
serialised_size.push(quote! { <u32 as ::bzipper::Serialise>::SERIALISED_SIZE });
- let arm = if matches!(variant.fields, Fields::Unit) {
- quote! { Self::#name => stream.append(&#discriminant)? }
- } else {
- let mut captures = Punctuated::<Capture, Token![,]>::new();
+ let mut captures = Punctuated::<Capture, Token![,]>::new();
- let mut chain_commands = Punctuated::<TokenStream, Token![;]>::new();
- chain_commands.push(quote! { stream.append(&#discriminant)? });
+ let mut chain_commands = Punctuated::<TokenStream, Token![;]>::new();
+ chain_commands.push(quote! { stream.append(&#discriminant)? });
- for (index, field) in variant.fields.iter().enumerate() {
- let field_ty = &field.ty;
+ for (index, field) in variant.fields.iter().enumerate() {
+ let field_ty = &field.ty;
- let field_name = field.ident
- .as_ref()
- .map_or_else(|| Ident::new(&format!("v{index}"), Span::call_site()), Clone::clone);
+ let field_name = field.ident
+ .as_ref()
+ .map_or_else(|| Ident::new(&format!("v{index}"), Span::call_site()), Clone::clone);
- serialised_size.push(quote! { <#field_ty as ::bzipper::Serialise>::SERIALISED_SIZE });
+ serialised_size.push(quote! { <#field_ty as ::bzipper::Serialise>::SERIALISED_SIZE });
- captures.push(Capture {
- ref_token: Token![ref](Span::call_site()),
- ident: field_name.clone(),
- });
+ captures.push(Capture {
+ ref_token: Token![ref](Span::call_site()),
+ ident: field_name.clone(),
+ });
- chain_commands.push(quote! { stream.append(#field_name)? });
- }
+ chain_commands.push(quote! { stream.append(#field_name)? });
+ }
- chain_commands.push_punct(Token![;](Span::call_site()));
+ chain_commands.push_punct(Token![;](Span::call_site()));
- match variant.fields {
- Fields::Named( ..) => quote! { Self::#name { #captures } => { #chain_commands } },
- Fields::Unnamed(..) => quote! { Self::#name(#captures) => { #chain_commands } },
- Fields::Unit => unreachable!(),
- }
+ let arm = match variant.fields {
+ Fields::Named( ..) => quote! { Self::#variant_name { #captures } => { #chain_commands } },
+ Fields::Unnamed(..) => quote! { Self::#variant_name(#captures) => { #chain_commands } },
+ Fields::Unit => quote! { Self::#variant_name => { #chain_commands } },
};
sizes.push(serialised_size);