#error #pattern #err #macro #boilerplate #let #helper

handle-error

An error handling helper macro to avoid the constant if let Err(e) pattern

3 releases

0.1.2 Apr 15, 2020
0.1.1 Apr 9, 2020
0.1.0 Apr 9, 2020

#2300 in Rust patterns


Used in nexusfetch

MPL-2.0 license

7KB
55 lines

handle-error

An error handling / bubbling macro to reduce rust error handling boilerplate where ? doesn't work because the site of the error matters.

GitHub tag Travis Build Status Crates.io Docs.rs

For a given fallible expression (expression returning a result), such as:

fn do_something() -> Result<(), E> {
    // ....
}

This can be used as follows:

#[macro_use]
extern crate log;

#[macro_use]
extern crate handle_error;

fn main() -> Result<(), E> {
  let v = handle_error!(do_something(), "Failed to do something");
  Ok(())
}

Replacing the common patterns:

#[macro_use]
extern crate log;

// Match case where we care about the ok value
fn example_one() -> Result<(), E> {
  let v = match do_something() {
    Ok(v) => v,
    Err(e) => {
      error!("Failed to do something");
      return Err(e);
    }
  };

  Ok(())
}

// If let where we do not care about the ok value
fn example_two() -> Result<(), E> {
  if let Err(e) = do_something() {
    error!("Failed to do something");
    return Err(e);
  }

  Ok(())
}

No runtime deps