Crate assert_type_eq

Source
Expand description

Statically assert that types from potentially different crate versions via different dependencies are identical.

Until RFC 1977 (public dependencies) is accepted, the situation where multiple different versions of the same crate are present is possible. In most situations this will simply cause code to not compile, as types mismatch, however with runtime structures like TypeMap this leads to runtime errors (often silent!) instead. This macro allows compile-time assertion that types via different dependencies are identical, and will interoperate, which is easier to debug than runtime errors.

Usage:

#[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() {
    // ...
}

Specify all versions of the same type via different dependencies. Any types that do not match the first type in the macro will cause a compile-time error.

Macrosยง