Crates.io | derive-debug |
lib.rs | derive-debug |
version | 0.1.2 |
source | src |
created_at | 2023-01-18 18:47:09.531982 |
updated_at | 2023-01-20 13:28:54.230069 |
description | Customizable derive macro for Debug trait |
homepage | |
repository | https://github.com/Rob2309/derive-debug |
max_upload_size | |
id | 761947 |
size | 22,733 |
This crate implements a more customizable version of #[derive(Debug)]
.
The usage is very similar to #[derive(Debug)]
with a few extra customization options.
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)]
completely omits a field in the output use derive_debug::Dbg;
#[derive(Dbg)]
struct Foo {
field_a: bool,
#[dbg(skip)]
field_b: u32,
}
// Outputs: Foo { field_a: true }
#[dbg(placeholder = "xyz")]
will print xyz
instead of the actual contents of a field 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")]
will print some_alias
as field name instead of the real name 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}")]
will print the field with the specified format 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")]
will print the field using the specified function. 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)]
only prints the name of the variant and omits its contents use derive_debug::Dbg;
#[derive(Dbg)]
enum Foo {
#[dbg(skip)]
SomeVariant{a: bool, b: u32},
}
// Outputs: SomeVariant
#[dbg(alias = "some_alias")]
will use some_alias
as variant name instead of the real name use derive_debug::Dbg;
#[derive(Dbg)]
enum Foo {
#[dbg(alias = "NotSomeVariant")]
SomeVariant{a: bool, b: u32},
}
// Outputs: NotSomeVariant { a: true, b: 42 }
#[dbg(alias = "MyAlias")]
will use MyAlias
as struct name instead of the real name 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 }