#macro #assert #static #impl

assert-impl

Macro for static assert types implement a trait or not

4 releases

Uses old Rust 2015

0.1.3 Aug 10, 2018
0.1.2 Aug 10, 2018
0.1.1 Aug 10, 2018
0.1.0 Aug 9, 2018

#1280 in Rust patterns

Download history 3671/week @ 2022-11-27 6331/week @ 2022-12-04 1624/week @ 2022-12-11 1052/week @ 2022-12-18 943/week @ 2022-12-25 499/week @ 2023-01-01 2145/week @ 2023-01-08 985/week @ 2023-01-15 831/week @ 2023-01-22 908/week @ 2023-01-29 966/week @ 2023-02-05 557/week @ 2023-02-12 401/week @ 2023-02-19 415/week @ 2023-02-26 589/week @ 2023-03-05 644/week @ 2023-03-12

2,061 downloads per month
Used in 21 crates (14 directly)

MIT license

5KB

Macro for static assert that types implement a trait or not.

Note: this macro can only be used inside function body due to restriction of Rust.

Example

Assuming you have the following definitions:

struct C;
struct Java;
struct JavaScript;
struct Python;
struct Rust;

trait StaticTyping {}
impl StaticTyping for C {}
impl StaticTyping for Java {}
impl StaticTyping for Rust {}

This should build:

assert_impl!(StaticTyping: C, Java, Rust);
assert_impl!(StaticTyping: C, Java, Rust, );
assert_impl!(!StaticTyping: JavaScript, Python);
assert_impl!(!StaticTyping: JavaScript, Python, );

But this should fail to build:

assert_impl!(StaticTyping: JavaScript);
assert_impl!(!StaticTyping: Rust);

lib.rs:

Macro for static assert that types implement a trait or not.

Note: this macro can only be used inside function body due to restriction of Rust.

Example

Assuming you have the following definitions:

struct C;
struct Java;
struct JavaScript;
struct Python;
struct Rust;

trait StaticTyping {}
impl StaticTyping for C {}
impl StaticTyping for Java {}
impl StaticTyping for Rust {}

This should build:

# #[macro_use] extern crate assert_impl;
# struct C;
# struct Java;
# struct JavaScript;
# struct Python;
# struct Rust;
# trait StaticTyping {}
# impl StaticTyping for C {}
# impl StaticTyping for Java {}
# impl StaticTyping for Rust {}
assert_impl!(StaticTyping: C, Java, Rust);
assert_impl!(StaticTyping: C, Java, Rust, );
assert_impl!(!StaticTyping: JavaScript, Python);
assert_impl!(!StaticTyping: JavaScript, Python, );

But these should fail to build:

# #[macro_use] extern crate assert_impl;
# struct C;
# struct Java;
# struct JavaScript;
# struct Python;
# struct Rust;
# trait StaticTyping {}
# impl StaticTyping for C {}
# impl StaticTyping for Java {}
# impl StaticTyping for Rust {}
assert_impl!(StaticTyping: JavaScript);
# #[macro_use] extern crate assert_impl;
# struct C;
# struct Java;
# struct JavaScript;
# struct Python;
# struct Rust;
# trait StaticTyping {}
# impl StaticTyping for C {}
# impl StaticTyping for Java {}
# impl StaticTyping for Rust {}
assert_impl!(!StaticTyping: Rust);

No runtime deps