#derive-debug #macro-derive #debugging #display #versatile #robust #fmt

fmt-derive

更稳健和通用的 derive 宏,用于 Debug 和 Display

9 个版本

0.1.2 2024年5月21日
0.1.1 2023年10月11日
0.1.0 2023年7月11日
0.0.6 2023年3月24日
0.0.1 2022年9月10日

#893Rust 模式

Download history 4/week @ 2024-05-13 248/week @ 2024-05-20 15/week @ 2024-05-27 19/week @ 2024-06-03 53/week @ 2024-06-10 14/week @ 2024-06-17 20/week @ 2024-06-24 6/week @ 2024-07-08 22/week @ 2024-07-15 26/week @ 2024-07-22 9/week @ 2024-07-29 13/week @ 2024-08-05 13/week @ 2024-08-12

62 每月下载量
2 crate 中使用

MIT/Apache

23KB
445

crates.io docs.rs

对 derive(Debug) 和 derive(Display) 的更稳健和通用的实现。与标准库中的 derive(Debug) 版本不同,这些宏总会成功生成一个实现 - 即使成员没有实现 Debug/Display。在这种情况下,生成的实现将打印一个形式为 <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

此 crate 是 no_std,可以从 no_stdstd 上下文中使用,无需采取任何操作。

MSRV

当前的 MSRV 是 1.69.0。对于此项目,它主要受其依赖的少数依赖项驱动。

依赖项

~1.4–2MB
~41K SLoC