https://github.com/danielschemmel/fmt-derive
A better `#[derive(Debug, Display)]`
https://github.com/danielschemmel/fmt-derive
Last synced: 6 months ago
JSON representation
A better `#[derive(Debug, Display)]`
- Host: GitHub
- URL: https://github.com/danielschemmel/fmt-derive
- Owner: danielschemmel
- Created: 2022-09-07T04:57:10.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2025-02-21T17:59:57.000Z (over 1 year ago)
- Last Synced: 2025-11-24T04:22:20.124Z (7 months ago)
- Language: Rust
- Homepage:
- Size: 61.5 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
[](https://crates.io/crates/fmt_derive)
[](https://docs.rs/fmt-derive/latest/fmt_derive/)
More robust and versatile implementation of `derive(Debug)` and `derive(Display)`. Unlike the version of`derive(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
``.
```rust
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 ``
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: , ignored: 42, hex_number: 0xDEADBEEF }");
assert_eq!(format!("{}", printable), "Printable { 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.