macro_rules! unwrap {
    ( $e:expr, () ) => { ... };
    ( $e:expr, $fallback:expr ) => { ... };
    ( $e:expr ) => { ... };
}
Expand description

Unwraps Options and Results, logging/breaking on errors, but unlike a.unwrap() this is nonfatal and continuable.

Other differences:

  • Works on booleans
  • Should breakpoint directly on the line of the unwrap!

Examples

use bugsalot::unwrap;

let a = true;
let _ : bool = unwrap!(a, false);
let _ : ()   = unwrap!(a, ());
let _ : ()   = unwrap!(a);
let _ : bool = unwrap!(a, return);

let a : Option<i32> = Some(42);
let _ : i32 = unwrap!(a, 0);
let _ : ()  = unwrap!(a, ());
let _ : ()  = unwrap!(a);
let _ : i32 = unwrap!(a, return);

let a : Result<i32, &'static str> = Ok(42);
let _ : i32 = unwrap!(a, 0);
let _ : ()  = unwrap!(a, ());
let _ : ()  = unwrap!(a);
let _ : i32 = unwrap!(a, return);

let a : *const i32 = &42;
let _ : i32 = unsafe { *unwrap!(a, &12) };
let _ : ()  =           unwrap!(a, ());
let _ : ()  =           unwrap!(a);
let _ : i32 = unsafe { *unwrap!(a, return) };