Skip to content

0.2.21 release

Compare
Choose a tag to compare
@rodrimati1992 rodrimati1992 released this 19 Sep 03:17
· 52 commits to master since this 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