ensure

Macroin errorfastly 0.13.1
macro_rules! ensure {
($cond:expr $(,)?) => { ... };
($cond:expr, $msg:literal $(,)?) => { ... };
($cond:expr, $err:expr $(,)?) => { ... };
($cond:expr, $fmt:expr, $($arg:tt)*) => { ... };
}

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][crate::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");
1
2
3
4
5
6
7
8
#[derive(Error, Debug)]
enum ScienceError {
#[error("recursion limit exceeded")]
RecursionLimitExceeded,
...
}
ensure!(depth <= MAX_DEPTH, ScienceError::RecursionLimitExceeded);