1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
|
# debug-ignore
[](https://crates.io/crates/debug-ignore)
[](https://docs.rs/debug-ignore/)
[](https://sunshowers-code.github.io/debug-ignore/rustdoc/debug_ignore/)
[](LICENSE-APACHE)
[](LICENSE-MIT)
This library contains `DebugIgnore`, a newtype wrapper that causes a field to be skipped while
printing out `Debug` output.
## Examples
```rust
use debug_ignore::DebugIgnore;
// Some structs have many fields with large `Debug` implementations.
#[derive(Debug)]
struct InnerStructWithLotsOfDebugInfo {
field: &'static str,
// ...
}
#[derive(Debug)]
pub struct PublicStruct {
inner: DebugIgnore<InnerStructWithLotsOfDebugInfo>,
}
impl PublicStruct {
pub fn new() -> Self {
Self {
// DebugIgnore<T> has a `From<T>` impl for the inner type; you can also construct
// one explicitly.
inner: InnerStructWithLotsOfDebugInfo { field: "field", /* ... */ }.into(),
}
}
}
let x = PublicStruct::new();
assert_eq!(format!("{:?}", x), "PublicStruct { inner: ... }");
// Fields within inner can still be accessed through the Deref impl.
assert_eq!(x.inner.field, "field");
```
## Why?
Some structs have many fields with large `Debug` implementations. It can be really annoying to
go through a ton of usually irrelevant `Debug` output.
`DebugIgnore` is a zero-cost, zero-compile-time way to achieve a `Debug` impl that skips over a
field.
## Optional features
`serde`: `serde` support with `#[serde(transparent)]`.
## Rust version support
The MSRV is **Rust 1.34** though this crate likely builds with older versions. This crate is
too trivial to require anything more recent.
Optional features may require newer versions of Rust.
## Alternatives
* Implement `Debug` by hand.
* [`derivative`](https://crates.io/crates/derivative) has greater control over the behavior of
`Debug` impls, at the cost of a compile-time proc-macro dependency.
## Contributing
Pull requests are welcome! Please follow the [code of conduct](CODE_OF_CONDUCT.md).
## License
This project is available under the terms of either the [Apache 2.0 license](LICENSE-APACHE) or the [MIT
license](LICENSE-MIT).
<!--
README.md is generated from README.tpl by cargo readme. To regenerate:
cargo install cargo-readme
cargo readme > README.md
-->
|