2个不稳定版本
0.2.0 | 2022年8月18日 |
---|---|
0.1.0 | 2022年8月17日 |
排名第593的调试
8KB
135 行
visual
如果满足,使用Display特质,否则回退到Debug,如果两者都没有实现,则使用默认字符串值。
原因
显示事物的典型“优雅”方式是通过Display特质。然而,有时这个特质不可用,但Debug可用。Debug很容易推导。在这些情况下,使用Debug作为回退会很方便。
用法
use visual::{vis, Visual};
fn main() {
// The `vis!` macro wraps your type in such a way that it can decide which trait to
// use: `Display`, `Debug` or neither
printer(vis!("hello")); // `&str` implements `Display`, so use it
printer(vis!(vec![1, 2, 3])); // `Vec` does not, but it impls `Debug`, so we use that
struct MyStruct;
printer(vis!(MyStruct)); // `MyStruct` impls neither, so we use a default string value
}
fn printer<T>(t: Visual<T>) { // Use the `Visual` wrapper around your type
println!("{}", t.get_display()); // Use `get_display` to get a string representation of your type
}
如果两个特质都没有实现,字符串表示形式将是visual::get_non_displayable_string()
定义的。这个默认标签可以通过调用visual::set_non_displayable_string("value")
初始化为自定义值一次。
致谢
为了让魔法生效,我使用了Lukas Kalbertodt提出的“autoderef hack”,该技术是基于Lukas Kalbertodt的建议,而Lukas Kalbertodt的建议又基于David Tolnay的技术。
链接
- 文档:docs.rs
- 包:crates.io
- 仓库:github.com