#display #string #print #format-string #format

visual

如果可用,使用Display,否则使用Debug

2个不稳定版本

0.2.0 2022年8月18日
0.1.0 2022年8月17日

排名第593调试

MIT 许可证

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的技术

无运行时依赖