diff --git a/stm32-data-macros/src/lib.rs b/stm32-data-macros/src/lib.rs index 8a4f0be..555504e 100644 --- a/stm32-data-macros/src/lib.rs +++ b/stm32-data-macros/src/lib.rs @@ -24,8 +24,16 @@ fn impl_enum_derive(ast: &syn::DeriveInput) -> TokenStream { let variant_name = &v.ident; let variant_debug = format!("{}::{}", name, variant_name); - quote! { - #name::#variant_name => #variant_debug, + match v.fields.len() { + 0 => quote! { + #name::#variant_name => ::core::fmt::Formatter::write_str(f, #variant_debug), + }, + 1 => quote! { + #name::#variant_name(__self_0) => ::core::fmt::Formatter::debug_tuple(f, #variant_debug) + .field(&__self_0) + .finish(), + }, + _ => unimplemented!(), } }) .collect(); @@ -34,9 +42,9 @@ fn impl_enum_derive(ast: &syn::DeriveInput) -> TokenStream { #[automatically_derived] impl ::core::fmt::Debug for #name { fn fmt(self: &Self, f: &mut ::core::fmt::Formatter) -> ::core::fmt::Result { - ::core::fmt::Formatter::write_str(f, match self { + match self { #match_variants - }) + } } } } diff --git a/stm32-data-macros/tests/test_macros.rs b/stm32-data-macros/tests/test_macros.rs new file mode 100644 index 0000000..350ee93 --- /dev/null +++ b/stm32-data-macros/tests/test_macros.rs @@ -0,0 +1,14 @@ +#![allow(dead_code)] + +use stm32_data_macros::EnumDebug; + +#[derive(Debug)] +struct A { + pub b: String, +} + +#[derive(EnumDebug)] +enum C { + D(A), + E, +} diff --git a/stm32-metapac-gen/src/data.rs b/stm32-metapac-gen/src/data.rs index b85f3cf..1609351 100644 --- a/stm32-metapac-gen/src/data.rs +++ b/stm32-metapac-gen/src/data.rs @@ -159,7 +159,7 @@ pub mod ir { pub inner: BlockItemInner, } - #[derive(Debug, Eq, PartialEq, Clone, Deserialize)] + #[derive(EnumDebug, Eq, PartialEq, Clone, Deserialize)] pub enum BlockItemInner { Block(BlockItemBlock), Register(Register), @@ -205,7 +205,7 @@ pub mod ir { pub enumm: Option, } - #[derive(Debug, Eq, PartialEq, Clone, Deserialize)] + #[derive(EnumDebug, Eq, PartialEq, Clone, Deserialize)] pub enum Array { Regular(RegularArray), Cursed(CursedArray), diff --git a/stm32-metapac-gen/src/lib.rs b/stm32-metapac-gen/src/lib.rs index 325993e..474d29b 100644 --- a/stm32-metapac-gen/src/lib.rs +++ b/stm32-metapac-gen/src/lib.rs @@ -392,12 +392,7 @@ fn stringify(metadata: T) -> String { metadata = format!("&{}", metadata); } - metadata - .replace(": [", ": &[") - .replace("Register(", "BlockItemInner::Register(") - .replace("Block(", "BlockItemInner::Block(") - .replace("Regular(", "Array::Regular(") - .replace("Cursed(", "Array::Cursed(") + metadata.replace(": [", ": &[") } fn gen_opts() -> generate::Options {