#different #version #compile-time #assert #type #compatible #assertions

assert-type-eq

宏,用于断言不同版本的可能不同 crate 的类型兼容性

1 个不稳定版本

使用旧的 Rust 2015

0.1.0 2017 年 8 月 31 日

#58#assertions

Download history 1988/week @ 2024-03-03 2033/week @ 2024-03-10 1358/week @ 2024-03-17 1196/week @ 2024-03-24 1520/week @ 2024-03-31 1335/week @ 2024-04-07 1080/week @ 2024-04-14 867/week @ 2024-04-21 1828/week @ 2024-04-28 1646/week @ 2024-05-05 2895/week @ 2024-05-12 3814/week @ 2024-05-19 5182/week @ 2024-05-26 1602/week @ 2024-06-02 1972/week @ 2024-06-09 1485/week @ 2024-06-16

10,926 每月下载次数
3 crate 中使用

Apache-2.0

6KB

assert-type-eq

Build Status crates.io

此 Rust crate 添加了一个宏,用于在编译时断言某些类型相同。当使用不同依赖项通过同一 crate 时非常有用,这可能会导致引入同一 crate 的不同版本,Rust 将其视为不兼容的类型。在大多数情况下,这本身会导致编译时错误,但是当使用运行时结构,如 AnyTypeMap 时,这不会导致编译时问题,但可能导致运行时问题,如缺少或意外的数据。通过使用此 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() {
    // ...
}

指定通过不同依赖项的同一种类型的所有版本。任何与宏中第一个类型不匹配的类型都会导致编译时错误。

无运行时依赖项