#traits #impl #macro

is-impl

Rust 宏,用于检查类型是否符合 impl

2 个版本

0.1.1 2019 年 11 月 6 日
0.1.0 2019 年 11 月 6 日

#2152Rust 模式

MIT/Apache

7KB

Is-Impl   构建状态 最新版本

关于

这是一个简单的宏,仅用于检查表达式是否符合 trait 类型。

动机

在编写复杂的 future 和 streams 代码时,当时我必须使用 futures 0.1 和 futures 0.3 库,我经常遇到大量的 .compat() 调用。我在其他类型语言中通常使用的一种技术是在各个地方添加类型,直到我能够精确地定位问题。

问题是,在 Rust 中,类型要么有时很长,要么根本无法命名。因此,理想情况下,你想要检查类型是否符合 trait。天真地,我尝试了以下内容

let f: impl Future<Output=i32> = something();

但这不是有效的 Rust 语法。impl trait 不能用于这些位置。现在,有了这个 trait,你可以将上面的断言写成以下内容

let f = is_impl!(dyn Future<Output=i32>, something());

更详细的例子可以在 示例 和文档中找到。

还有类似的 crate,如 assert_impl,但我发现将断言直接在开发中使用很有用。

无运行时依赖