1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2017 年 8 月 31 日 |
---|
#58 在 #assertions
10,926 每月下载次数
在 3 crate 中使用
6KB
assert-type-eq
此 Rust crate 添加了一个宏,用于在编译时断言某些类型相同。当使用不同依赖项通过同一 crate 时非常有用,这可能会导致引入同一 crate 的不同版本,Rust 将其视为不兼容的类型。在大多数情况下,这本身会导致编译时错误,但是当使用运行时结构,如 Any
或 TypeMap
时,这不会导致编译时问题,但可能导致运行时问题,如缺少或意外的数据。通过使用此 crate,可以断言同一 crate 的不同版本是兼容的,将运行时错误转换为编译时错误。
lib.rs
:
静态断言通过不同依赖项从可能不同的 crate 版本中的类型相同。
在 RFC 1977(公共依赖项)被接受之前,可能出现多个同一 crate 的不同版本。在大多数情况下,这只会导致代码无法编译,因为类型不匹配,但是像 TypeMap
这样的运行时结构会导致运行时错误(通常是静默的!)而不是编译时错误。此宏允许通过不同依赖项进行编译时断言类型相同,并可以互操作,这比运行时错误更容易调试。
用法
#[macro_use]
extern crate assert_type_eq;
pub mod my_crate {
pub struct MyStruct;
}
mod a {
pub use super::my_crate;
}
mod b {
pub use super::my_crate;
}
assert_type_eq!(
my_crate::MyStruct,
a::my_crate::MyStruct,
b::my_crate::MyStruct,
);
fn main() {
// ...
}
指定通过不同依赖项的同一种类型的所有版本。任何与宏中第一个类型不匹配的类型都会导致编译时错误。