Macro mpstthree::attempt

source ·
macro_rules! attempt {
    (@recurse ($a:expr) { } catch ($e: ident) $b:block) => { ... };
    (@recurse ($a:expr) { $e:expr; $($tail:tt)* } $($handler:tt)*) => { ... };
    ({ $e:expr; $($tail:tt)* } $($handler:tt)*) => { ... };
}
Expand description

Try to run the first block of code and, upon error, run the second block of code. Each step in the block of code must return Result<Ok(_), Err(e)>.

§Example

use mpstthree::attempt;

fn do_step1() -> Result<(), String> {
    println!("Step 1");
    Ok(())
}
fn do_step2() -> Result<(), String> {
    println!("Step 2");
    Err("Error in step 2".into())
}
fn do_step3() -> Result<(), String> {
    println!("Step 3");
    Ok(())
}

fn main() {
    attempt! {{
       do_step1();
       do_step2();
       do_step3();
    } catch (e) {
       println!("Failed to perform necessary steps: {e:?}");
    }}
}