1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
//! Static assertions for crate features, with informative errors.
//!
//! The macros from this crate print which specific features are responsible for
//! the assertion failure.
//!
//! # Examples
//!
//! ### Exactly one feature
//!
//! This example demonstrates the [`exactly_one`] macro,
//! which asserts that exactly one of the listed features is enabled.
//!
//!
//! ```compile_fail
//! assert_cfg::exactly_one!{
//! feature = "foo",
//! feature = "bar",
//! feature = "qux",
//! }
//! ```
//!
//! When the `"foo"` and `"bar"` features are enabled,
//! the above code produces this compile-time error:
//! ```text
//! error[E0080]: evaluation of constant value failed
//! --> src/lib.rs:15:1
//! |
//! 4 | / assert_cfg::exactly_one!{
//! 5 | | feature = "foo",
//! 6 | | feature = "bar",
//! 7 | | feature = "qux",
//! 8 | | }
//! | |_^ the evaluated program panicked at '
//! too many features were enabled, only one of them can be enabled:
//! - `feature = "foo"`
//! - `feature = "bar"`
//!
//! ```
//!
//!
//! # No-std support
//!
//! `assert_cfg` is `#![no_std]`, it can be used anywhere Rust can be used.
//!
//! # Minimum Supported Rust Version
//!
//! This requires Rust 1.57.0, because it uses the `panic` macro in a const context.
//!
//!
//!
//! [`exactly_one`]: crate::exactly_one
use crateCond;
compile_error!;
;