Macro rustc_const_eval::interpret::validity::try_validation[][src]

macro_rules! try_validation {
    ($e : expr, $where : expr,
 $($($p : pat_param) | + => { $($what_fmt : expr), + }
   $(expected { $($expected_fmt : expr), + }) ?), + $(,) ?) => { ... };
}
Expand description

If $e throws an error matching the pattern, throw a validation failure. Other errors are passed back to the caller, unchanged – and if they reach the root of the visitor, we make sure only validation errors and InvalidProgram errors are left. This lets you use the patterns as a kind of validation list, asserting which errors can possibly happen:

let v = try_validation!(some_fn(), some_path, {
    Foo | Bar | Baz => { "some failure" },
});

An additional expected parameter can also be added to the failure message:

let v = try_validation!(some_fn(), some_path, {
    Foo | Bar | Baz => { "some failure" } expected { "something that wasn't a failure" },
});

An additional nicety is that both parameters actually take format args, so you can just write the format string in directly:

let v = try_validation!(some_fn(), some_path, {
    Foo | Bar | Baz => { "{:?}", some_failure } expected { "{}", expected_value },
});