macro_rules! ensure { ($($tt:tt)*) => { ... }; }
Expand description
Return early with an error if a condition is not satisfied.
This macro is equivalent to
if !$cond { return Err(anyhow!($args...)); }
.
The surrounding function’s or closure’s return value is required to be
Result<_, anyhow::Error>
.
Analogously to assert!
, ensure!
takes a condition and exits the function
if the condition fails. Unlike assert!
, ensure!
returns an Error
rather than panicking.
§Example
ensure!(user == 0, "only user 0 is allowed");
#[derive(Error, Debug)]
enum ScienceError {
#[error("recursion limit exceeded")]
RecursionLimitExceeded,
...
}
ensure!(depth <= MAX_DEPTH, ScienceError::RecursionLimitExceeded);