tiny_bail 0.1.0

Small but flexible convenience macros for bailing on failure.
docs.rs failed to build tiny_bail-0.1.0
Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Visit the last successful build: tiny_bail-0.7.0

tiny_bail

Crates.io Docs License

Bailing is an error-handling pattern that takes the middle path between unwrap and ?:

  • Compared to unwrap: Bail will return or continue instead of panicking.
  • Compared to ?: Bail will log or ignore the error instead of propagating it.

The middle path avoids unwanted panics without the ergonomic challenges of propagating errors with ?.

This crate provides four macro variants: r!, rq!, c!, and cq!; along with their long-form aliases or_return!, or_return_quiet!, or_continue!, and or_continue_quiet!, respectively.

use tiny_bail::prelude::*;

/// Increment the last number of a list, or warn if it's empty.
fn increment_last(list: &mut [i32]) {
    // With `r!`:
    *r!(list.last_mut()) += 1;

    // Without `r!`:
    if let Some(x) = list.last_mut() {
        *x += 1;
    } else {
        println!("Bailed at src/example.rs:34:18: `list.last_mut()`");
        return;
    }
}

The macros support bool, Option, and Result types out-of-the-box. This can be extended by implementing the Success trait for other types.

You can specify the return value as an optional first argument to the macro, or omit it to default to Default::default()—which even works in functions with no return value.

License

This crate is available under either of MIT or Apache-2.0 at your choice.