custom_debug 0.6.2

Derive Debug with a custom format per field
Documentation
#![allow(clippy::disallowed_names)]
use custom_debug::Debug;
use std::fmt;

#[derive(Debug)]
struct Foo {
    #[debug(format = "{} things")]
    x: i32,
    #[debug(skip)]
    y: i32,
    #[debug(with = "hex_fmt")]
    z: i32,
}

fn hex_fmt<T: fmt::Debug>(n: &T, f: &mut fmt::Formatter) -> fmt::Result {
    write!(f, "0x{:02X?}", n)
}

fn main() {
    let foo = Foo {
        x: 42,
        y: 123,
        z: 171,
    };

    println!("{:#?}", foo);
    println!("Hidden field 'y': {}", foo.y);
}