Macro loop_unwrap::unwrap_break_err[][src]

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) => { ... };
}

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);