diff --git a/src/common/ident_index.rs b/src/common/ident_index.rs index c0e38d4..23403cb 100644 --- a/src/common/ident_index.rs +++ b/src/common/ident_index.rs @@ -1,6 +1,7 @@ use quote::ToTokens; use syn::{Ident, Index}; +#[derive(Clone)] pub(crate) enum IdentOrIndex { Ident(Ident), Index(Index), diff --git a/src/trait_handlers/debug/debug_enum.rs b/src/trait_handlers/debug/debug_enum.rs index 1e42381..a361d06 100644 --- a/src/trait_handlers/debug/debug_enum.rs +++ b/src/trait_handlers/debug/debug_enum.rs @@ -2,7 +2,11 @@ use quote::{format_ident, quote, ToTokens}; use syn::{Data, DeriveInput, Fields, Meta, Type}; use super::models::{FieldAttributeBuilder, FieldName, TypeAttributeBuilder, TypeName}; -use crate::{common::path::path_to_string, supported_traits::Trait, trait_handlers::TraitHandler}; +use crate::{ + common::{ident_index::IdentOrIndex, path::path_to_string}, + supported_traits::Trait, + trait_handlers::TraitHandler, +}; pub(crate) struct DebugEnumHandler; @@ -219,9 +223,9 @@ impl TraitHandler for DebugEnumHandler { let field_name_var = format_ident!("_{}", index); - let key = match field_attribute.name { - FieldName::Custom(name) => name, - FieldName::Default => field_name_var.clone(), + let key: IdentOrIndex = match field_attribute.name { + FieldName::Custom(name) => name.into(), + FieldName::Default => index.into(), }; pattern_token_stream.extend(quote!(#field_name_var,)); diff --git a/src/trait_handlers/debug/debug_struct.rs b/src/trait_handlers/debug/debug_struct.rs index 6430480..342719b 100644 --- a/src/trait_handlers/debug/debug_struct.rs +++ b/src/trait_handlers/debug/debug_struct.rs @@ -1,4 +1,4 @@ -use quote::{format_ident, quote}; +use quote::quote; use syn::{Data, DeriveInput, Fields, Meta, Type}; use super::{ @@ -63,17 +63,11 @@ impl TraitHandler for DebugStructHandler { continue; } - let (key, field_name) = match field_attribute.name { - FieldName::Custom(name) => { - (name, IdentOrIndex::from_ident_with_index(field.ident.as_ref(), index)) - }, - FieldName::Default => { - if let Some(ident) = field.ident.as_ref() { - (ident.clone(), IdentOrIndex::from(ident)) - } else { - (format_ident!("_{}", index), IdentOrIndex::from(index)) - } - }, + let field_name = + IdentOrIndex::from_ident_with_index(field.ident.as_ref(), index); + let key: IdentOrIndex = match field_attribute.name { + FieldName::Custom(name) => name.into(), + FieldName::Default => field_name.clone(), }; let ty = &field.ty; diff --git a/tests/debug_enum.rs b/tests/debug_enum.rs index 05a158a..1b2ce76 100644 --- a/tests/debug_enum.rs +++ b/tests/debug_enum.rs @@ -253,7 +253,7 @@ fn named_field_1() { f1: 1 }) ); - assert_eq!("Tuple { _0: 1 }", format!("{:?}", Enum::Tuple(1))); + assert_eq!("Tuple { 0: 1 }", format!("{:?}", Enum::Tuple(1))); } #[test] @@ -273,7 +273,7 @@ fn named_field_2() { f1: 1 }) ); - assert_eq!("Tuple { _0: 1 }", format!("{:?}", Enum::Tuple(1))); + assert_eq!("Tuple { 0: 1 }", format!("{:?}", Enum::Tuple(1))); } #[test] @@ -302,7 +302,7 @@ fn named_field_3() { f1: 1 }) ); - assert_eq!("Tuple { _0: Hi }", format!("{:?}", Enum::Tuple(1))); + assert_eq!("Tuple { 0: Hi }", format!("{:?}", Enum::Tuple(1))); } #[test] diff --git a/tests/debug_struct.rs b/tests/debug_struct.rs index 4cd8573..4781b89 100644 --- a/tests/debug_struct.rs +++ b/tests/debug_struct.rs @@ -245,7 +245,7 @@ fn named_field_1() { #[educe(Debug(named_field = true))] struct Tuple(u8); - assert_eq!("Tuple { _0: 1 }", format!("{:?}", Tuple(1))); + assert_eq!("Tuple { 0: 1 }", format!("{:?}", Tuple(1))); } #[test] @@ -267,7 +267,7 @@ fn named_field_2() { #[educe(Debug(named_field(true)))] struct Tuple(u8); - assert_eq!("Tuple { _0: 1 }", format!("{:?}", Tuple(1))); + assert_eq!("Tuple { 0: 1 }", format!("{:?}", Tuple(1))); } #[test]