[−][src]Crate static_assertions
Compile-time assertions to ensure that invariants are met.
All assertions within this crate are performed at compile-time. This allows for finding errors quickly and early when it comes to ensuring certain features or aspects of a codebase. These macros are especially important when exposing a public API that requires types to be the same size or implement certain traits.
Usage
This crate is available on crates.io and can be used by adding the
following to your project's Cargo.toml
:
[dependencies]
static_assertions = "0.3.4"
and this to your crate root (main.rs
or lib.rs
):
#[macro_use] extern crate static_assertions;
Examples
Very thorough examples are provided in the docs for each individual macro. Failure case examples are also documented.
Limitations
Due to implementation details, some macros can only be used normally from within the context of a function. To use these macros in other contexts, a unique label must be provided.
// error: expected item after attributes const_assert!(true == true);
This can be fixed via:
const_assert!(label; true == true);
This can be followed at issue #1.
Labeling Limitation Fix
The labeling workaround is not
necessary (and is removed)
when compiling on nightly Rust with the nightly
feature flag enabled. This
can be done by having the following in your project's Cargo.toml
:
[dependencies.static_assertions]
version = "0.3.4"
features = ["nightly"]
To compile with nightly Rust, run the following in your shell or command prompt of choice:
rustup install nightly
cargo +nightly build
Notice that this also requires enabling the
underscore_const_names
nightly Rust feature:
#![feature(underscore_const_names)] const_assert!(true != false); fn main() { const_assert!(false != true); }
Changes
See CHANGELOG.md
for a complete list of what has changed from one version to another.
Donate
This project is made freely available (as in free beer), but unfortunately not all beer is free! So, if you would like to buy me a beer (or coffee or more), then consider supporting my work that's benefited your project and thousands of others.
Macros
assert_cfg | Asserts that a given configuration is set. |
assert_eq_size | Asserts that types are equal in size. |
assert_eq_size_ptr | Asserts that values pointed to are equal in size. |
assert_eq_size_val | Asserts that values are equal in size. |
assert_eq_type | Asserts that types are equal. |
assert_fields | Asserts that the type has the given fields. |
assert_impl | Deprecated Asserts that the type implements all of the given traits. |
assert_impl_all | Asserts that the type implements all of the given traits. |
assert_ne_type | Asserts that types are not equal. |
assert_not_impl_all | Asserts that the type does not implement all of the given traits. |
assert_not_impl_any | Asserts that the type does not implement any of the given traits. |
assert_obj_safe | Asserts that the traits are object-safe. |
const_assert | Asserts that constant expressions evaluate to |
const_assert_eq | Asserts that constants are equal in value. |
const_assert_ne | Asserts that constants are not equal in value. |