Crate static_assertions_next

Source
Expand description

Banner

Assertions to ensure correct assumptions about constants, types, and more.

All checks provided by 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 = "1.1.0"

and this to your crate root (main.rs or lib.rs):

#[macro_use]
extern crate static_assertions;

When using Rust 2018 edition, the following shorthand can help if having #[macro_use] is undesirable.

extern crate static_assertions as sa;

sa::const_assert!(true);

§Procedural Extensions

As an extension crate proc_static_assertions adds a number of new assertions to this. These are implemented as procedural macros, hence the “proc” prefix. As a result, they have a bit more visibility over what’s being asserted over than normal macros would.

It can be enabled via the proc feature flag in your Cargo.toml:

[dependencies]
static_assertions = { version = "1.1.0", features = ["proc"] }

§Examples

Very thorough examples are provided in the docs for each individual macro. Failure case examples are also documented.

§Changes

See CHANGELOG.md for an exhaustive list of what has changed from one version to another.

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.

Become a Patron! Buy me a coffee

Macros§

assert_align_eq
Asserts that the types’ alignments are equal.
assert_align_ge
Asserts that the types’ alignments are greater than or equal to each other.
assert_align_gt
Asserts that the types’ alignments are greater than each other.
assert_align_le
Asserts that the types’ alignments are less than or equal to each other.
assert_align_lt
Asserts that the types’ alignments are less than each other.
assert_align_ne
Asserts that the types’ alignments are not equal.
assert_cfg
Asserts that a given configuration is set.
assert_eq_alignDeprecated
Asserts that the types’ alignments are equal.
assert_eq_sizeDeprecated
Asserts that types are equal in alignment.
assert_eq_size_ptrDeprecated
Asserts that values pointed to are equal in size.
assert_eq_size_valDeprecated
Asserts that values pointed to are equal in size.
assert_fields
Asserts that the type has the given fields.
assert_impl
Asserts that the type implements a logical trait expression.
assert_impl_all
Asserts that the type implements all of the given traits.
assert_impl_any
Asserts that the type implements any of the given traits.
assert_impl_not_all
Asserts that the type does not implement all of the given traits.
assert_impl_not_any
Asserts that the type does not implement any of the given traits.
assert_impl_one
Asserts that the type implements exactly one in a set of traits.
assert_not_impl_allDeprecated
Asserts that the type does not implement all of the given traits.
assert_not_impl_anyDeprecated
Asserts that the type does not implement any of the given traits.
assert_obj_safe
Asserts that the traits support dynamic dispatch (object-safety).
assert_size_eq
Asserts that types are equal in size.
assert_size_eq_ptr
Asserts that values pointed to are equal in size.
assert_size_eq_val
Asserts that values are equal in size.
assert_trait_sub_all
Asserts that the trait is a child of all of the other traits.
assert_trait_sub_any
Asserts that the trait is a child of one or more of the other traits.
assert_trait_super_all
Asserts that the trait is a parent of all of the other traits.
assert_type_eq_all
Asserts that all types in a list are equal to each other.
assert_type_ne_all
Asserts that all types are not equal to each other.
const_assert
Asserts that constant expressions evaluate to true.
const_assert_eq
Asserts that constants are equal in value.
const_assert_eq_usize
Asserts that constants of type usize are equal in value.
const_assert_ge
Asserts that constants are less than or equal to each other.
const_assert_gt
Asserts that constants are greater than each other.
const_assert_le
Asserts that constants are less than or equal to each other.
const_assert_lt
Asserts that constants are less than each other.
const_assert_ne
Asserts that constants are not equal in value.
does_impl
Returns true if the type does implement a logical trait expression.