#error-context #error-exit #exiting #process #graceful

eoe

This crate provides utilities for exiting processes on errors gracefully

10 releases

Uses new Rust 2024

0.4.1 Jan 16, 2026
0.4.0 Jan 16, 2026
0.3.3 Sep 1, 2025
0.3.2 Apr 14, 2025
0.1.1 Jul 14, 2024

#1113 in Rust patterns


Used in 2 crates

MIT license

14KB
147 lines

Exit on Error

Crates.io Documentation License

This crate provides utilities for exiting processes on errors gracefully, leveraging anyhow to display detailed error context and chained messages.

Examples

Exiting on error:

use anyhow::{Context, anyhow};
use eoe::ExitOnError;

Err::<(), _>(anyhow!("Mm-noom-ba-deh"))
    .context("Doom-boom-ba-beh")
    .context("Doo-boo-boom-ba-beh-beh")
    .exit_on_error();
Show output
error: Doo-boo-boom-ba-beh-beh
caused by: Doom-boom-ba-beh
caused by: Mm-noom-ba-deh

Or if you prefer the word quit:

use anyhow::{Context, anyhow};
use eoe::QuitOnError;

Err::<(), _>(anyhow!("Mm-ba-ba-beh, mm-ba-ba-beh"))
    .context("Dee-day-da, ee-day-da")
    .quit_on_error();
Show output
error: Dee-day-da, ee-day-da
caused by: Mm-ba-ba-beh, mm-ba-ba-beh

The output style is customizable:

use eoe::{ExitOnError, Segment, Style};

let _ = eoe::ERROR.set(Segment {
    style: Style::new().bold().blue(),
    value: "Watchin' some good friends screamin'",
});
let _ = eoe::SEP.set(Segment {
    style: Style::new(),
    value: " 😱 ",
});
let _ = eoe::MESSAGE_STYLE.set(Style::new().italic().yellow());
let _ = eoe::MESSAGE_ON_NONE.set("Let me out");

None::<()>.exit_on_error();
Show output
Watchin' some good friends screamin' 😱 Let me out

Dependencies

~0.3–2.3MB
~41K SLoC