9 releases
0.1.2 | May 21, 2024 |
---|---|
0.1.1 | Oct 11, 2023 |
0.1.0 | Jul 11, 2023 |
0.0.6 | Mar 24, 2023 |
0.0.1 | Sep 10, 2022 |
#843 in Rust patterns
66 downloads per month
Used in 2 crates
23KB
445 lines
More robust and versatile implementation of derive(Debug)
and derive(Display)
. Unlike the version ofderive(Debug)
in the standard library, these macros will always successfully generate an implementation - even if a member does not
implement Debug
/Display
. In that case, the generated implementation will print a replacement string of the form
<TypeName>
.
use fmt_derive::Debug; // replacement for `use std::fmt::Debug;`
// a type that implements neither `Debug` nor `Display`
struct Unprintable;
#[derive(Debug, fmt_derive::Display)]
struct Printable {
// unprintable members will be printed as `<Type>`
unprintable: Unprintable,
// use `#[display(ignore)]` (or `#[debug(ignore]` respectively) to skip a member when printing
#[display(ignore)]
ignored: u32,
// use the `fmt` attribute to refer to both `Debug` and `Display` at once
#[fmt("{:#08X}", self.hex_number)]
hex_number: u32,
}
fn main() {
let printable = Printable{
hex_number: 0xDEADBEEF,
ignored: 42,
unprintable: Unprintable,
};
assert_eq!(format!("{:?}", printable), "Printable { unprintable: <Unprintable>, ignored: 42, hex_number: 0xDEADBEEF }");
assert_eq!(format!("{}", printable), "Printable { unprintable: <Unprintable>, hex_number: 0xDEADBEEF }");
}
no_std
This crate is no_std
and can be used from both no_std
and std
contexts without any action required.
MSRV
The current MSRV is 1.69.0. For this project, it is primarily driven by the few dependencies it relies on.
Dependencies
~1.4–2MB
~40K SLoC