Macro show_notes::main_try

source ·
macro_rules! main_try {
    ($e:expr) => { ... };
}
Expand description

Define a macro like try! but which works in the context of main().

try! takes a Result<T, E> and, if it is Ok<T>, supplies the T value, or if it is Err<E> returns the error from the function. However, since main has a void tuple () return type, you cannot use try! in main(). This main_try! macro instead debug-prints the error and returns.

// Alias `Result` for brevity.
type LocalResult = Result<i32, &'static str>;

let an_ok: LocalResult = Ok(10);
let ok_val = main_try!(an_ok);
assert_eq!(ok_val, 10);

// We try to assign to another val, but it's an error, so we return.
let an_err: LocalResult = Err("Alas, this is a failure.");
let err_val = main_try!(an_err);  // Prints `Alas, this is a failure.`
// We'll never get here. If we did, the doctest would fail.
assert!(false);