macro_rules! unwrap_break_err {
($x:expr) => { ... };
($x:expr, $label:lifetime) => { ... };
($x:expr, $label:lifetime, $err_msg:expr) => { ... };
($x:expr, $err_msg:expr) => { ... };
($x:expr, $err_msg:expr, $label:lifetime) => { ... };
}
Expand description
Imports loop unwrap macros into the library. Works only on Result enum. If the value is Err(e), breaks the loop returning Err(e). Otherwise, it unwraps and the code continues. Supports loop labels.
ยงExamples
let value = loop {
let s = "not a number";
let n = unwrap_break_err!(s.parse::<i32>(), "Couldn't parse number."); // breaks with error value
break Ok(n + 1); //<-- this line will never be reached since the macro breaks
};
assert_eq!(true, value.is_err());
let result = 'main: loop {
loop {
let n = unwrap_break_err!("t".parse::<i32>(), 'main);
break 'main Ok(100);
}
};
assert_eq!(result.is_err(), true);