3个版本
0.1.2 | 2023年1月20日 |
---|---|
0.1.1 | 2023年1月20日 |
0.1.0 | 2023年1月18日 |
在 调试 中排名第658
每月下载量 7,361
在 6 个Crates中使用了(直接使用3个)
19KB
342 行
derive-debug
此crate实现了一个更可定制的 #[derive(Debug)]
版本。
使用方法
使用方法与 #[derive(Debug)]
非常相似,但增加了一些额外的定制选项。
结构体的衍生
use derive_debug::Dbg;
#[derive(Dbg)]
struct Foo {
field_a: u32,
#[dbg(placeholder = "...")]
field_b: Vec<u32>, // will be printed as "field_b: ..."
#[dbg(skip)]
field_c: bool, // will be left out
#[dbg(alias = "my_string")]
field_d: u32, // will be printed as "my_string: 42"
#[dbg(fmt = "{:#06X}")]
field_e: u32, // will be printed with the specified format
}
枚举的衍生
use derive_debug::Dbg;
#[derive(Dbg)]
enum Foo {
VariantA(u32, u32, u32),
#[dbg(skip)]
VariantB{a: u32, b: bool}, // Will be printed as "VariantB"
// same options available as for struct fields
VariantC{a: u32, #[dbg(placeholder = "...")] b: bool}
}
详细选项
字段选项
#[dbg(skip)]
完全省略输出中的字段
use derive_debug::Dbg;
#[derive(Dbg)]
struct Foo {
field_a: bool,
#[dbg(skip)]
field_b: u32,
}
// Outputs: Foo { field_a: true }
#[dbg(placeholder = "xyz")]
将打印xyz
而不是字段的实际内容
use derive_debug::Dbg;
#[derive(Dbg)]
struct Foo {
field_a: bool,
#[dbg(placeholder = "...")]
field_b: u32,
}
// Outputs: Foo { field_a: true, field_b: ... }
#[dbg(alias = "some_alias")]
将打印some_alias
作为字段名而不是真实名称
use derive_debug::Dbg;
#[derive(Dbg)]
struct Foo {
field_a: bool,
#[dbg(alias="not_field_b")]
field_b: u32,
}
// Outputs: Foo { field_a: true, not_field_b: 42 }
#[dbg(fmt = "{:#06X}")]
将以指定的格式打印字段
use derive_debug::Dbg;
#[derive(Dbg)]
struct Foo {
field_a: bool,
#[dbg(fmt = "{:#06X}")]
field_b: u32,
}
// Outputs: Foo { field_a: true, field_b: 0x002A }
#[dbg(formatter = "my_func")]
将使用指定的函数打印字段。
函数必须返回一个可以使用 "{}" 格式的类型。
use derive_debug::Dbg;
#[derive(Dbg)]
struct Foo(u32, #[dbg(formatter = "fmt_not_zero")] u32);
fn fmt_not_zero(v: &u32) -> &'static str {
if *v == 0 {
"0"
} else {
"not 0"
}
}
// Outputs: Foo(42, not 0)
枚举变体选项
#[dbg(skip)]
仅打印变体的名称并省略其内容
use derive_debug::Dbg;
#[derive(Dbg)]
enum Foo {
#[dbg(skip)]
SomeVariant{a: bool, b: u32},
}
// Outputs: SomeVariant
#[dbg(alias = "some_alias")]
将使用some_alias
作为变体名称而不是真实名称
use derive_debug::Dbg;
#[derive(Dbg)]
enum Foo {
#[dbg(alias = "NotSomeVariant")]
SomeVariant{a: bool, b: u32},
}
// Outputs: NotSomeVariant { a: true, b: 42 }
struct 选项
#[dbg(alias = "MyAlias")]
将使用MyAlias
作为结构体名称而不是真实名称
use derive_debug::Dbg;
#[derive(Dbg)]
#[dbg(alias = "NotFoo")]
struct Foo {
field_a: bool,
field_b: u32,
}
// Outputs: NotFoo { field_a: true, not_field_b: 42 }
依赖关系
~1.5MB
~35K SLoC