1 //! [![Banner](https://raw.githubusercontent.com/nvzqz/static-assertions-rs/assets/Banner.png)](https://github.com/nvzqz/static-assertions-rs) 2 //! 3 //! <div align="center"> 4 //! <a href="https://crates.io/crates/static_assertions"> 5 //! <img src="https://img.shields.io/crates/d/static_assertions.svg" alt="Downloads"> 6 //! </a> 7 //! <a href="https://travis-ci.org/nvzqz/static-assertions-rs"> 8 //! <img src="https://travis-ci.org/nvzqz/static-assertions-rs.svg?branch=master" alt="Build Status"> 9 //! </a> 10 //! <img src="https://img.shields.io/badge/rustc-^1.37.0-blue.svg" alt="rustc ^1.37.0"> 11 //! <br><br> 12 //! </div> 13 //! 14 //! Assertions to ensure correct assumptions about constants, types, and more. 15 //! 16 //! _All_ checks provided by this crate are performed at [compile-time]. This 17 //! allows for finding errors quickly and early when it comes to ensuring 18 //! certain features or aspects of a codebase. These macros are especially 19 //! important when exposing a public API that requires types to be the same size 20 //! or implement certain traits. 21 //! 22 //! # Usage 23 //! 24 //! This crate is available [on crates.io][crate] and can be used by adding the 25 //! following to your project's [`Cargo.toml`]: 26 //! 27 //! ```toml 28 //! [dependencies] 29 //! static_assertions = "1.1.0" 30 //! ``` 31 //! 32 //! and this to your crate root (`main.rs` or `lib.rs`): 33 //! 34 //! ``` 35 //! #[macro_use] 36 //! extern crate static_assertions; 37 //! # fn main() {} 38 //! ``` 39 //! 40 //! When using [Rust 2018 edition][2018], the following shorthand can help if 41 //! having `#[macro_use]` is undesirable. 42 //! 43 //! ```edition2018 44 //! extern crate static_assertions as sa; 45 //! 46 //! sa::const_assert!(true); 47 //! ``` 48 //! 49 //! # Examples 50 //! 51 //! Very thorough examples are provided in the docs for 52 //! [each individual macro](#macros). Failure case examples are also documented. 53 //! 54 //! # Changes 55 //! 56 //! See [`CHANGELOG.md`](https://github.com/nvzqz/static-assertions-rs/blob/master/CHANGELOG.md) 57 //! for an exhaustive list of what has changed from one version to another. 58 //! 59 //! # Donate 60 //! 61 //! This project is made freely available (as in free beer), but unfortunately 62 //! not all beer is free! So, if you would like to buy me a beer (or coffee or 63 //! *more*), then consider supporting my work that's benefited your project 64 //! and thousands of others. 65 //! 66 //! <a href="https://www.patreon.com/nvzqz"> 67 //! <img src="https://c5.patreon.com/external/logo/become_a_patron_button.png" alt="Become a Patron!" height="35"> 68 //! </a> 69 //! <a href="https://www.paypal.me/nvzqz"> 70 //! <img src="https://buymecoffee.intm.org/img/button-paypal-white.png" alt="Buy me a coffee" height="35"> 71 //! </a> 72 //! 73 //! [Rust 1.37]: https://blog.rust-lang.org/2019/08/15/Rust-1.37.0.html 74 //! [2018]: https://blog.rust-lang.org/2018/12/06/Rust-1.31-and-rust-2018.html#rust-2018 75 //! [crate]: https://crates.io/crates/static_assertions 76 //! [compile-time]: https://en.wikipedia.org/wiki/Compile_time 77 //! [`Cargo.toml`]: https://doc.rust-lang.org/cargo/reference/manifest.html 78 79 #![doc(html_root_url = "https://docs.rs/static_assertions/1.1.0")] 80 #![doc(html_logo_url = "https://raw.githubusercontent.com/nvzqz/static-assertions-rs/assets/Icon.png")] 81 82 #![no_std] 83 84 #![deny(unused_macros)] 85 86 #[doc(hidden)] 87 pub extern crate core as _core; 88 89 mod assert_cfg; 90 mod assert_eq_align; 91 mod assert_eq_size; 92 mod assert_fields; 93 mod assert_impl; 94 mod assert_obj_safe; 95 mod assert_trait; 96 mod assert_type; 97 mod const_assert; 98