Crates.io | fmt-derive |
lib.rs | fmt-derive |
version | 0.1.2 |
source | src |
created_at | 2022-09-10 22:54:50.107241 |
updated_at | 2024-05-21 02:39:12.49946 |
description | A more robust and versatile derive macro for Debug and Display. |
homepage | |
repository | https://github.com/danielschemmel/fmt-derive |
max_upload_size | |
id | 662756 |
size | 20,515 |
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.
The current MSRV is 1.69.0. For this project, it is primarily driven by the few dependencies it relies on.