2020-05-15 11:56:09 -07:00
2020-05-06 18:17:19 -07:00
2020-05-06 18:16:56 -07:00
2020-04-24 07:43:20 -07:00
2020-05-15 11:56:09 -07:00

color-eyre

Build Status Latest Version Rust Documentation

A custom context for the eyre crate for colorful error reports, suggestions, and tracing-error support.

Setup

Add the following to your toml file:

[dependencies]
eyre = "0.4"
color-eyre = "0.3"

And then import the type alias from color-eyre for eyre::Report or eyre::Result.

use color_eyre::Report;

// or

fn example() -> color_eyre::Result<()> {
    # Ok(())
    // ...
}

Disabling tracing support

If you don't plan on using tracing_error and SpanTrace you can disable the tracing integration to cut down on unused dependencies:

[dependencies]
eyre = "0.4"
color-eyre = { version = "0.3", default-features = false }

Example

use color_eyre::{Help, Report};
use eyre::WrapErr;
use tracing::{info, instrument};
use tracing_error::ErrorLayer;
use tracing_subscriber::prelude::*;
use tracing_subscriber::{fmt, EnvFilter};

fn main() -> Result<(), Report> {
    let fmt_layer = fmt::layer().with_target(false);
    let filter_layer = EnvFilter::try_from_default_env()
        .or_else(|_| EnvFilter::try_new("info"))
        .unwrap();

    tracing_subscriber::registry()
        .with(filter_layer)
        .with(fmt_layer)
        .with(ErrorLayer::default())
        .init();

    Ok(read_config()?)
}

#[instrument]
fn read_file(path: &str) -> Result<(), Report> {
    info!("Reading file");
    Ok(std::fs::read_to_string(path).map(drop)?)
}

#[instrument]
fn read_config() -> Result<(), Report> {
    read_file("fake_file")
        .wrap_err("Unable to read config")
        .suggestion("try using a file that exists next time")
}

Minimal Report Format

minimal report format

Short Report Format (with RUST_LIB_BACKTRACE=1)

short report format

Full Report Format (with RUST_LIB_BACKTRACE=full)

full report format

Explanation

This crate works by defining a Context type which implements eyre::EyreContext and a pair of type aliases for setting this context type as the parameter of eyre::Report.

use color_eyre::Context;

pub type Report = eyre::Report<Context>;
pub type Result<T, E = Report> = core::result::Result<T, E>;

Features

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in this crate by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.
Description
A trait object based error handling type for easy idiomatic error handling and reporting in Rust applications
Readme 3.7 MiB
Languages
Rust 98.6%
Python 1.3%