0.2.21 release
This release improves the assertion failure message for all the assertc*
macros.
Example
Code:
#![feature(const_mut_refs)]
use const_format::{StrWriter, assertc_ne, writec};
use const_format::utils::str_eq;
macro_rules! check_valid_pizza{
($user:expr, $topping:expr) => {
assertc_ne!(
$topping,
"pineapple",
"You can't put pineapple on pizza, {}",
$user,
);
}
}
check_valid_pizza!("John", "salami");
check_valid_pizza!("Dave", "sausage");
check_valid_pizza!("Bob", "pineapple");
Error message before:
error: any use of this value will cause an error
--> src/lib.rs:140:1
|
22 | check_valid_pizza!("Bob", "pineapple");
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ exceeded interpreter step limit (see `#[const_eval_limit]`)
|
= note: `#[deny(const_err)]` on by default
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error[E0080]: could not evaluate constant
--> /const_format/src/panicking.rs:32:5
|
32 | .
| ^ the evaluated program panicked at '
--------------------------------------------------------------------------------
module_path: rust_out
line: 22
assertion failed: LEFT != RIGHT
left: "pineapple"
right: "pineapple"
You can't put pineapple on pizza, Bob
--------------------------------------------------------------------------------
', /const_format/src/panicking.rs:31:1
|
= note: this error originates in a macro (in Nightly builds, run with -Z macro-backtrace for more info)
error: aborting due to 2 previous errors
Error message now:
error[E0080]: evaluation of constant value failed
--> src/lib.rs:171:27
|
21 | check_valid_pizza!("Bob", "pineapple");
| ^^^^^^^^^^^ the evaluated program panicked at '
assertion failed: `(left != right)`
left: `"pineapple"`
right: `"pineapple"`
You can't put pineapple on pizza, Bob
', src/lib.rs:21:27
Changelog
0.2.21
Rewrote assertion macros to:
- Have more concise error messages
- Point to all their arguments when the assertion fails
- Resemble std error messages more