Skip to content

Commit 959b10e

Browse files
authored
Merge pull request #839 from rust-embedded/dbg
implement Debug for Field/BitReader + generic Debug for Reg
2 parents 6979dc4 + 05bc353 commit 959b10e

File tree

3 files changed

+26
-19
lines changed

3 files changed

+26
-19
lines changed

CHANGELOG.md

+2
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/).
77

88
## [Unreleased]
99

10+
- Yet more clean field & register `Debug`
11+
1012
## [v0.33.2] - 2024-05-07
1113

1214
- Remove unneeded `format_args` in register `Debug` impl

src/generate/generic.rs

+22-1
Original file line numberDiff line numberDiff line change
@@ -53,7 +53,7 @@ pub trait RegisterSpec {
5353
/// Raw field type
5454
pub trait FieldSpec: Sized {
5555
/// Raw field type (`u8`, `u16`, `u32`, ...).
56-
type Ux: Copy + PartialEq + From<Self>;
56+
type Ux: Copy + core::fmt::Debug + PartialEq + From<Self>;
5757
}
5858

5959
/// Marker for fields with fixed values
@@ -258,6 +258,15 @@ impl<REG: Readable + Writable> Reg<REG> {
258258
}
259259
}
260260

261+
impl<REG: Readable> core::fmt::Debug for crate::generic::Reg<REG>
262+
where
263+
R<REG>: core::fmt::Debug
264+
{
265+
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
266+
core::fmt::Debug::fmt(&self.read(), f)
267+
}
268+
}
269+
261270
#[doc(hidden)]
262271
pub mod raw {
263272
use super::{marker, BitM, FieldSpec, RegisterSpec, Unsafe, Writable};
@@ -433,6 +442,12 @@ impl<FI: FieldSpec> FieldReader<FI> {
433442
}
434443
}
435444

445+
impl<FI: FieldSpec> core::fmt::Debug for FieldReader<FI> {
446+
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
447+
core::fmt::Debug::fmt(&self.bits, f)
448+
}
449+
}
450+
436451
impl<FI> PartialEq<FI> for FieldReader<FI>
437452
where
438453
FI: FieldSpec + Copy,
@@ -472,6 +487,12 @@ impl<FI> BitReader<FI> {
472487
}
473488
}
474489

490+
impl<FI> core::fmt::Debug for BitReader<FI> {
491+
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
492+
core::fmt::Debug::fmt(&self.bits, f)
493+
}
494+
}
495+
475496
/// Marker for register/field writers which can take any value of specified width
476497
pub struct Safe;
477498
/// You should check that value is allowed to pass to register/field writer marked with this

src/generate/register.rs

+2-18
Original file line numberDiff line numberDiff line change
@@ -331,12 +331,6 @@ pub fn render_register_mod(
331331
write!(f, "{}", self.bits())
332332
}
333333
}
334-
#debug_feature
335-
impl core::fmt::Debug for crate::generic::Reg<#regspec_ty> {
336-
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
337-
core::fmt::Debug::fmt(&self.read(), f)
338-
}
339-
}
340334
});
341335
}
342336

@@ -467,24 +461,22 @@ fn render_register_mod_debug(
467461
Some(a) => a,
468462
None => access,
469463
};
470-
let bit_or_bits = if f.bit_width() > 1 { "bits" } else { "bit" };
471-
let bit_or_bits = syn::Ident::new(bit_or_bits, span);
472464
log::debug!("register={} field={}", name, f.name);
473465
if field_access.can_read() && f.read_action.is_none() {
474466
if let Field::Array(_, de) = &f {
475467
for suffix in de.indexes() {
476468
let f_name_n = field_accessor(&f.name.expand_dim(&suffix), config, span);
477469
let f_name_n_s = format!("{f_name_n}");
478470
r_debug_impl.extend(quote! {
479-
.field(#f_name_n_s, &self.#f_name_n().#bit_or_bits())
471+
.field(#f_name_n_s, &self.#f_name_n())
480472
});
481473
}
482474
} else {
483475
let f_name = f.name.remove_dim();
484476
let f_name = field_accessor(&f_name, config, span);
485477
let f_name_s = format!("{f_name}");
486478
r_debug_impl.extend(quote! {
487-
.field(#f_name_s, &self.#f_name().#bit_or_bits())
479+
.field(#f_name_s, &self.#f_name())
488480
});
489481
}
490482
}
@@ -494,14 +486,6 @@ fn render_register_mod_debug(
494486
#close
495487
#close
496488
});
497-
r_debug_impl.extend(quote! {
498-
#debug_feature
499-
impl core::fmt::Debug for crate::generic::Reg<#regspec_ty> {
500-
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
501-
core::fmt::Debug::fmt(&self.read(), f)
502-
}
503-
}
504-
});
505489
} else if !access.can_read() || register.read_action.is_some() {
506490
r_debug_impl.extend(quote! {
507491
#debug_feature

0 commit comments

Comments
 (0)