Macro loop_unwrap::unwrap_break[][src]

macro_rules! unwrap_break {
    ($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 like .unwrap, if it’s an Err or None, it calls break on the loop. Prints an error message with println!() if provided. Loop Label can be provided in any order besides the Result/Option being the first argument. If loop label is proivded, the specified loop will be break;-ed.

Examples

loop {
        let input = "Not a number";
        let parsed_input: i32 = unwrap_break!(input.parse()); //parse returns Err for this input
    }
println!("This line will be reached.");
loop {
        let input = "Not a number";
        let parsed_input: i32 = unwrap_break!(input.parse(), "Please Enter a Number!");
        // "Please Enter a Number!" is printed in console with a `println!()`
        //loop breaks
    }
loop {
        let some_value: i32 = unwrap_break!(Some(32), "Please Enter a Number!");
        assert_eq!(some_value, 32_i32)
        //no breakage here.
    }
'main: loop {
       loop {
           let n = unwrap_break!("t".parse::<i32>(), "Couldn't parse, exiting main loop", 'main);
           break; //<-- this line won't be reached.
       }
       println!("This line will never be reached, because 'main breaks.");
   }