N7U2FHPRHGARPZ6M7LYBDJ52NMYE23VD5YALZ7CC76W3V5OLBP7QC WDGVASK46JRA3THAHIUSRBPFG2PZM7ZN6TSVQINRHRVHALGISP7AC FMOQYTXLYJX36LWFNUMBNQEOGTXYFPH2XKBXR62MTMXPQ6BY3B3QC GOPJFSDQLXOY7EGBNR26HON32UIMSC3IAWZZL57A277CMX2D4OOAC P74ZROEVCWORKPSBYDCNPSSZFTI7AXJAHWNFOMWFWNSE7OMYNUBAC 5JPOXYSROPEEERSG5D4XCBZTB6YBJRC767UCQOOD4KS72R56O7AAC IBR73LRIY2UC44B6M7BXP64WCQT5ZKILB2DLYRLUATET55BAYBEAC KCOCFOS6KMCTVS6K3WE6KOQSWC3QNWN2E36ASHQPP3Z3H4BHR3NQC NYASOMQ5TOSKGOBCXVF76I42CS6M2IZIRJXVJ4M4MN6LD55N6DVQC D3IJE5IHSC64GMC3QZUYMSPZL2PXIVOHCWF7BREKRQXJQLURZBLQC LNM226ITXRMWOSX6GOJ4HO72BWFRBDKQTEZMF4QUJUACUIOKIEJQC YWW5TKMSPEGRZ52FQZ3SC4C3DEZ57U5XUO4LHZC34BJA7QR5NSCQC ANPVVYNDAQDZ5C5UK5Q45RUZJ6CSRLRZJNUNWZ2Z7NHIBJQKMJVQC 6BNRWGF55J5M3YBWYNTWJCRJQSEHY7YRKOUBV43W7I2HCTFDJHUQC 7T5M2QMTLQOO7IAVV3PNTEWMFAROZRHKQ3ILVH2M6UVH6ZX7LK2AC 3ZZ75E2AOF7DO3TMR422QV7ZXNYOQZTOGF67LVSCEMX6N75Y36LAC CITEDKPB6MKVZUEYEDE5ZKTNVY35HCOAXKDPYG7YLLEOVFNMSRXQC W5YRNIBZIMTQLOKIBWBF7CHCIOLKXVHV7Y2AIKMKG7GCQSAVZKBAC YNTEYSW7NVBWQLJU45XRK7AWQR5NWFOB4UUVVQ62ERZOO2QJJGAAC CMUTTQVULRL5WISGIGHMKGLCKUG3YJRJCBIBNU7SMEJQXFQBAHWAC IPMYODUQCBXWWBP23CX5LCGRKEOOX7UCKYJALNPFS7DCX6NL4R7AC SG6KZY4MUKOBPA7BBFRGGZIP36HWQ3WXJACMLBCZ57RX2HCWHWRQC 4OGIZN3K7Q53QWSYTZPTDBZGI7K26ZE4S3UD2763Q4MVYLNU3V6QC QC7NT7OSHSES2YXEDEGK7JLCEGZCNQVC7ATCYQMV7BA4IVJCHOAAC XRD42IPQNR7ZIUUFEDXZV7GHHGTG725FSCNJOROZSGYYRAKTVWVAC CRSOWJH2FLUWC6ZJDOYFN4QQP2VKRDWSDNCH3FLYJRYJSN5KWXNAC language: rustrust:- nightly- beta- stablescript:- cargo test- cargo check --no-default-featuresmatrix:include:- rust: 1.34.0script: cargo check- rust: 1.36.0script: cargo check --no-default-features- rust: nightlyname: Clippyscript:- rustup component add clippy || travis_terminate 0- cargo clippy -- -Dclippy::all
on: [push, pull_request]name: Continuous integrationjobs:check:name: Checkruns-on: ubuntu-lateststrategy:matrix:rust:- stable- 1.31.0steps:- uses: actions/checkout@v1- uses: actions-rs/toolchain@v1with:toolchain: ${{ matrix.rust }}override: true- uses: actions-rs/cargo@v1with:command: checktest:name: Test Suiteruns-on: ubuntu-lateststrategy:matrix:rust:- stable- nightly- 1.31.0steps:- uses: actions/checkout@v1- uses: actions-rs/toolchain@v1with:toolchain: ${{ matrix.rust }}override: true- uses: actions-rs/cargo@v1with:command: test- uses: actions-rs/cargo@v1with:command: testargs: --no-default-featuresfmt:name: Rustfmtruns-on: ubuntu-lateststrategy:matrix:rust:- stable- 1.31.0steps:- uses: actions/checkout@v1- uses: actions-rs/toolchain@v1with:toolchain: ${{ matrix.rust }}override: true- run: rustup component add rustfmt- uses: actions-rs/cargo@v1with:command: fmtargs: --all -- --checkclippy:name: Clippyruns-on: ubuntu-lateststrategy:matrix:rust:- stable- 1.31.0steps:- uses: actions/checkout@v1- uses: actions-rs/toolchain@v1with:toolchain: ${{ matrix.rust }}override: true- run: rustup component add clippy- uses: actions-rs/cargo@v1with:command: clippyargs: -- -D warnings
This library provides [`eyre::Error`][Error], a trait object based error typefor easy idiomatic error handling in Rust applications.
This library provides [`eyre::ErrReport`][ErrReport], a trait object basederror handling type for easy idiomatic error handling and reporting in Rustapplications.
write!(f, "{}", self.error())?;if f.alternate() {for cause in self.chain().skip(1) {write!(f, ": {}", cause)?;}}Ok(())
self.context.display(self.error(), f)
let error = self.error();if f.alternate() {return Debug::fmt(error, f);}write!(f, "{}", error)?;if let Some(cause) = error.source() {write!(f, "\n\nCaused by:")?;let multiple = cause.source().is_some();for (n, error) in Chain::new(cause).enumerate() {writeln!(f)?;let mut indented = Indented {inner: f,number: if multiple { Some(n) } else { None },started: false,};write!(indented, "{}", error)?;}}#[cfg(backtrace)]{use std::backtrace::BacktraceStatus;let backtrace = self.backtrace();if let BacktraceStatus::Captured = backtrace.status() {let mut backtrace = backtrace.to_string();if backtrace.starts_with("stack backtrace:") {// Capitalize to match "Caused by:"backtrace.replace_range(0..1, "S");}backtrace.truncate(backtrace.trim_end().len());write!(f, "\n\n{}", backtrace)?;}}Ok(())
self.context.debug(self.error(), f)
struct Indented<'a, D> {inner: &'a mut D,number: Option<usize>,started: bool,
pub(crate) struct Indented<'a, D> {pub(crate) inner: &'a mut D,pub(crate) number: Option<usize>,pub(crate) started: bool,
}}fn display(&self, error: &(dyn std::error::Error + 'static), f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {write!(f, "{}", error)?;if f.alternate() {for cause in Chain::new(error).skip(1) {write!(f, ": {}", cause)?;}}Ok(())}fn debug(&self, error: &(dyn std::error::Error + 'static), f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {use core::fmt::Write as _;if f.alternate() {return core::fmt::Debug::fmt(error, f);}write!(f, "{}", error)?;if let Some(cause) = error.source() {write!(f, "\n\nCaused by:")?;let multiple = cause.source().is_some();for (n, error) in Chain::new(cause).enumerate() {writeln!(f)?;let mut indented = fmt::Indented {inner: f,number: if multiple { Some(n) } else { None },started: false,};write!(indented, "{}", error)?;}}#[cfg(backtrace)]{use std::backtrace::BacktraceStatus;let backtrace = self.backtrace.as_ref().or_else(|| error.backtrace()).expect("backtrace capture failed");if let BacktraceStatus::Captured = backtrace.status() {let mut backtrace = backtrace.to_string();if backtrace.starts_with("stack backtrace:") {// Capitalize to match "Caused by:"backtrace.replace_range(0..1, "S");}backtrace.truncate(backtrace.trim_end().len());write!(f, "\n\n{}", backtrace)?;}