OFA7R4NFSICEFZE2SLDK7IP3ZZH4MFWN2YIT756ZJ42W2QJHTOWQC AIP3SFGCT25VRARONGIYW6W2VK5WW3BBL6HFEWE3WVDGVH4JBXWAC 3XYTXGZS3CZ6H2DK6AQOLXN3BJM7N4RWRPQFQO67JMRWRJG6FHWQC AGKGSWUYLSQ5EWK5W5WANQBXFVTUSXKZTSTO22AEFEKEONG2V7OQC 3ZMGYD4IIM256SCQZ52GFVYEOVNBPVOWKX32QZPBF7N644NCQGNAC GWXSSFUIQKS3VF3A4Q4C3DK6JCIAHXRVVMX6P4YOXYLPXSBRV4LQC LNM226ITXRMWOSX6GOJ4HO72BWFRBDKQTEZMF4QUJUACUIOKIEJQC TXHTORSMXMKDSGFNFIKQZYIY3KBDKJF2DJPA55NW4R6ZYBCQKRVQC EKYR4HDT6DHI7H5YMSHEBHXLPDCA2X2XNXYHDKHWGMPHNVTUBCMQC GFUITBG5JGUCDMG34FEMPPJAZGQKURXA5L2RYS6YOQC4DIQGASMAC D3IJE5IHSC64GMC3QZUYMSPZL2PXIVOHCWF7BREKRQXJQLURZBLQC YWW5TKMSPEGRZ52FQZ3SC4C3DEZ57U5XUO4LHZC34BJA7QR5NSCQC OQCFKTKCBTWGXL27ZLWQSL4L5VPREJAYN7MVCCR4GXW6WLWYOUHAC FJ7MWHMLIDTBGJJNKCNS5GIBQIJBUQRXLQEAFOCVZI7O4NA4XGSAC KB6THMJJPQ56OLYYODIM5IVEF3IAPCAEC2HGH3C7LAEF24IW6XQQC X4XC4Q2MJC6Q45SOWNGIG2PWZFE4AG5E3M5ZW3OGV6ABUVC2XNGQC KGWHXYQ5JQD52NFGGGZVXNU25DRNMYCAY6IEDEKTWYDSLWAXPIZQC STVQHBZPF2AV3H5PVVSZZSP47R6OA3IDTN66VSGE3Z5DWS3U43IAC GPASF452R6CFMY6PRIRQ4AGZTCYCLD33Q7CCWSDCK4N2LSHI4UZQC ZKAEZKAMMQWPQIV6X2CFQUUOG7RBJOE3MNXLBH4J3ZASUYTCZJAQC GYNLSVK3MDYAOAKNOUXTC27IRIDEOUVSOEEG5LZ2PS3T4DEL6DQAC CITEDKPB6MKVZUEYEDE5ZKTNVY35HCOAXKDPYG7YLLEOVFNMSRXQC UC2L4AE6COAZGVMLTIV4INSNKRT2RGCEE6IRLOBKCBJZ3IV7GCRAC ZWBKKVT5TX2CSMBVEYZMQ6DLCXVHSD7SWFEKXWK6XKD6RP24MJJAC 6ZEY2NWHKGME25ZSTH6OYNG75JIOJECLVGY3KF4FIWSQBAVFRDAQC CMUTTQVULRL5WISGIGHMKGLCKUG3YJRJCBIBNU7SMEJQXFQBAHWAC GZZOJ7ZUSBPI3HXIV5UCFNMCDAMZPPLISY2UDV73FDN74HZ3AWJAC EXRAFG37562NH775A4LDPP5FNKXLPLIZSJ3FCOBINUDKRFBJHCXAC 3ZZ75E2AOF7DO3TMR422QV7ZXNYOQZTOGF67LVSCEMX6N75Y36LAC KOSCTMZC6VWQ5WST25FPATUAFCYG3JZGG3LF6MXSS42GPGHLDREQC KVTZ5BUW7V7RZ3STMQXF6LXVLMGRXDBEOPRBTHX2O4HELTQ2467QC TOXJRHV7ZUPHWXCA4TAG3YRBTIPUZQ5BNX34D3VD2JAIYLRN6XSAC B35ATKRQB7JRNWXZD2YRYT6H73ZTQBUEXHZWZCHQEIOMSST5QJ6QC KCOCFOS6KMCTVS6K3WE6KOQSWC3QNWN2E36ASHQPP3Z3H4BHR3NQC RFSCYZWH7VQUGHAM374YUDGZGM5S4KT6NXWDMHXL4767SCRSL2DQC A2YH3UCN3AEAXWW7IHTJBBQY4XRBSV2TBOX3N47ZZGKE6L7P7L5AC LX7EZ6TKJCQI3K7SV56WMTPFY672WN5UOBGXKKXQI7S73GMWNNXAC ZEYYSYM7QBZG4Q67AN3CHYZQWO2DVVHXRAK6NX44UQD6VO3JTK3AC A7XDW47SJ3ZYWRH64PLNI77XZTVX5FY6NX2LMT33L6BMUH3DYBMQC NPOFDGQF4CE72IZBT5Y7KPIBHWPPNOEPBYD5RTUHSVUJ2W4XFRVQC RQSDP2B2OVRFRJ33OZCVB4TYCQMSR3JZYG7FNA6TQ3HFABTGOGMQC BA4YE6QGRTYONATHUP347OFUBUCWXQPNZ6Q5DIQ2DLJLRZJ6AC4AC FH4KYVAA3AIVOQZTEXBT44UYTOAP6PJJFBSF6XQ5ALNGQO7OLKOAC 77T3TBBG5VN2Q4AUXHQVZTIFOSXDGTHW72J4MLX4P7LMYQURYZJAC 3LI5FAF5ULXOWBMTG4XCUOMUPVROSFDY6FWGE574OH4JGPMOPNVAC T64LKJ2RTUDFYSJQI7KF4WHZYXZHNEGNOS7ZMMCRIQZ4YN5LOOMAC Z4YYQXEE4OQPF22I4LD7RVQIBKK67AHCYR6C35MANUCIC4P3EPYQC W5YRNIBZIMTQLOKIBWBF7CHCIOLKXVHV7Y2AIKMKG7GCQSAVZKBAC RIKD63GT7RFV3UAV4BYD57GFXKXALWUP6J7AAHB3M6JVAZ3WFTXAC VWTWVVRECX62JABUZYFCTCPWTXXT3DB4635RIAGCKIQMGJ7VXRGAC LR3QQRO4ZFYYIY4JJ7LJIO4VUK3EWESPIAPLPPIP4W7N75PSVQHQC DFDCD3LPJCYCNINXBXGFAYD4CT2SBI4RBITE7OK5D5QPTIWWMQKAC LT5DF4XJ7RZIHKUTFXAVVMGMGTEOQA3F2LWK4MGMZM6FPVZXUHBQC DCAJEW7O2H4N3I5EXTSBH7ALLV452CORUPJT3YQXY7QXQQIFDC4AC N7U2FHPRHGARPZ6M7LYBDJ52NMYE23VD5YALZ7CC76W3V5OLBP7QC YNTEYSW7NVBWQLJU45XRK7AWQR5NWFOB4UUVVQ62ERZOO2QJJGAAC IPMYODUQCBXWWBP23CX5LCGRKEOOX7UCKYJALNPFS7DCX6NL4R7AC SG6KZY4MUKOBPA7BBFRGGZIP36HWQ3WXJACMLBCZ57RX2HCWHWRQC JDCRIWCKVBGA2FL7PEIXATYG4INEISAGC7DDY46WPVQTEUB6PBNQC MBJSV73XEUIBF7LU6MUYQJQLCRXYY7LXD7KZZFLLOCEDOKU2EAQAC OXKWHQFHTDDOWX3QDMHDWHCT3HFKWQS7Z7DEL3ILJBA7GNITA4GAC 3YMIGCYC3YUOZP5OBNSTOIJOT6ZTEDDKNMR5YCAJRD5JNBYFETYAC Q3TF6DU36OM4M4A72QPN74NRKH7CZBBKFAKLTJRPL5JD3LI5276QC 7WGNUDSYDVWLON2ZGOWOEAFITUZGIWOYDPH24CTPT3LOPNYCW56QC YTH3GCSKUG34XBAAVP65UA67C26K2JDDL2N6PGYLKL2GG3MGFU6AC GOPJFSDQLXOY7EGBNR26HON32UIMSC3IAWZZL57A277CMX2D4OOAC COA6YXVKGYVAIDYWVD3DN6IYTXXS74GKEHLPLDN6UZ5YT3G5SRVQC I6C64JYRPH3EWX6QMYVLIX5LUGXPOU4BI4VZSTDJ5TYEKSF64P2AC EBCOKP4HQSTNUXR5PJQUWTOQEE3DGB6W3KKIN5TYP4FPWAS5ORHQC MOSHJ3ZHBZUKDXUP4WDUJGOG3R3QTVZKBN6RSZLNGTMEVSKIRR7AC 6BNRWGF55J5M3YBWYNTWJCRJQSEHY7YRKOUBV43W7I2HCTFDJHUQC UBKNLKSJOZ6RR3BVEBTW2ID4NQ6DP34Z7HC6QA3755Q6YSTYSGEAC HO72KYBN3DYN6EC2RQUW4YP3CFBSY4X3ULYLFA2HQ36S5QGTGKIQC DI5NRQZB4J4AARWOX7L4NXCPNLPOTXFZTMTQZRVY2HNK62GVL5ZQC K3KDTBCJ2D6AHLKDKSV7KTKXOXO72KZ5CXBVLCYSKDNRCJ3EGDMQC AOQSHDBY3FLBJBFEIJQDYHGQOBECTYRN3KPWJWQMCVWDTB6L2IRQC RF4MODRCRWKMUG26O222X3ZY3MLE6X7BYZDWEQRLVUITTWYAGNUAC KQXMNV3RMRPSJCQVW4I2HSCFJQ6ZDRLNMJOTQI4MODB6UYA3ONQQC BZSTVYDVHJA3ZMCM3YTU4U5JKJC2JVUDM5APSBIGMSS54J2C4WKQC WJWASFHAXBNMWHEXMKR53FLXPVUFVT44F2WKSJSA57V2UOZVSOJQC customize its behavior. Below is a list of known custom context crates andshort summaries of what features they provide.
customize its behavior. Below is a list of known crates that export reporthandlers for eyre and short summaries of what features they provide.
- [`jane-eyre`]: A custom context type that exists purely for the pun.Currently just re-exports `color-eyre`.
- [`jane-eyre`]: A a report handler crate that exists purely for the pun.Currently just re-exports `color-eyre`.
[actions-badge]: https://github.com/yaahc/eyre/workflows/Continuous%20integration/badge.svg[actions-url]: https://github.com/yaahc/eyre/actions?query=workflow%3A%22Continuous+integration%22
impl<T, E, C: EyreContext> Sealed<C> for Result<T, E> where E: ext::StdError<C> {}impl<T, C: EyreContext> Sealed<C> for Option<T> {}
impl<T, E, H: EyreHandler> Sealed<H> for Result<T, E> where E: ext::StdError<H> {}impl<T, H: EyreHandler> Sealed<H> for Option<T> {}
object_mut: object_mut::<E, C>,object_boxed: object_boxed::<E, C>,object_downcast: object_downcast::<E, C>,object_drop_rest: object_drop_front::<E, C>,
object_mut: object_mut::<E, H>,object_boxed: object_boxed::<E, H>,object_downcast: object_downcast::<E, H>,object_drop_rest: object_drop_front::<E, H>,
object_mut: object_mut::<MessageError<M>, C>,object_boxed: object_boxed::<MessageError<M>, C>,object_downcast: object_downcast::<M, C>,object_drop_rest: object_drop_front::<M, C>,
object_mut: object_mut::<MessageError<M>, H>,object_boxed: object_boxed::<MessageError<M>, H>,object_downcast: object_downcast::<M, H>,object_drop_rest: object_drop_front::<M, H>,
object_mut: object_mut::<DisplayError<M>, C>,object_boxed: object_boxed::<DisplayError<M>, C>,object_downcast: object_downcast::<M, C>,object_drop_rest: object_drop_front::<M, C>,
object_mut: object_mut::<DisplayError<M>, H>,object_boxed: object_boxed::<DisplayError<M>, H>,object_downcast: object_downcast::<M, H>,object_drop_rest: object_drop_front::<M, H>,
let context = Some(C::default(&NoneError));unsafe { Report::construct(error, vtable, context) }
let handler = Some(H::default(&NoneError));unsafe { Report::construct(error, vtable, handler) }
object_mut: object_mut::<ContextError<D, E>, C>,object_boxed: object_boxed::<ContextError<D, E>, C>,object_downcast: context_downcast::<D, E, C>,object_drop_rest: context_drop_rest::<D, E, C>,
object_mut: object_mut::<ContextError<D, E>, H>,object_boxed: object_boxed::<ContextError<D, E>, H>,object_downcast: context_downcast::<D, E, H>,object_drop_rest: context_drop_rest::<D, E, H>,
object_mut: object_mut::<BoxedError, C>,object_boxed: object_boxed::<BoxedError, C>,object_downcast: object_downcast::<Box<dyn StdError + Send + Sync>, C>,object_drop_rest: object_drop_front::<Box<dyn StdError + Send + Sync>, C>,
object_mut: object_mut::<BoxedError, H>,object_boxed: object_boxed::<BoxedError, H>,object_downcast: object_downcast::<Box<dyn StdError + Send + Sync>, H>,object_drop_rest: object_drop_front::<Box<dyn StdError + Send + Sync>, H>,
let context = self.inner.context.take();let error: ContextError<D, Report<C>> = ContextError { msg, error: self };
let handler = self.inner.handler.take();let error: ContextError<D, Report<H>> = ContextError { msg, error: self };
object_mut: object_mut::<ContextError<D, Report<C>>, C>,object_boxed: object_boxed::<ContextError<D, Report<C>>, C>,object_downcast: context_chain_downcast::<D, C>,object_drop_rest: context_chain_drop_rest::<D, C>,
object_mut: object_mut::<ContextError<D, Report<H>>, H>,object_boxed: object_boxed::<ContextError<D, Report<H>>, H>,object_downcast: context_chain_downcast::<D, H>,object_drop_rest: context_chain_drop_rest::<D, H>,
/// Get a reference to the Context for this Report.pub fn context(&self) -> &C {self.inner.context.as_ref().unwrap()
/// Get a reference to the Handler for this Report.pub fn handler(&self) -> &H {self.inner.handler.as_ref().unwrap()
/// Get a mutable reference to the Context for this Report.pub fn context_mut(&mut self) -> &mut C {self.inner.context.as_mut().unwrap()
/// Get a mutable reference to the Handler for this Report.pub fn handler_mut(&mut self) -> &mut H {self.inner.handler.as_mut().unwrap()}/// Get a reference to the Handler for this Report.#[doc(hidden)]pub fn context(&self) -> &H {self.inner.handler.as_ref().unwrap()
object_drop: unsafe fn(Box<ErrorImpl<(), C>>),object_ref: unsafe fn(&ErrorImpl<(), C>) -> &(dyn StdError + Send + Sync + 'static),
object_drop: unsafe fn(Box<ErrorImpl<(), H>>),object_ref: unsafe fn(&ErrorImpl<(), H>) -> &(dyn StdError + Send + Sync + 'static),
object_boxed: unsafe fn(Box<ErrorImpl<(), C>>) -> Box<dyn StdError + Send + Sync + 'static>,object_downcast: unsafe fn(&ErrorImpl<(), C>, TypeId) -> Option<NonNull<()>>,object_drop_rest: unsafe fn(Box<ErrorImpl<(), C>>, TypeId),
object_boxed: unsafe fn(Box<ErrorImpl<(), H>>) -> Box<dyn StdError + Send + Sync + 'static>,object_downcast: unsafe fn(&ErrorImpl<(), H>, TypeId) -> Option<NonNull<()>>,object_drop_rest: unsafe fn(Box<ErrorImpl<(), H>>, TypeId),
//! This library provides [`eyre::Report`][Report], a trait object based error//! type for easy idiomatic error handling in Rust applications.
//! This library provides [`eyre::Report`][Report], a trait object based//! error handling type for easy idiomatic error handling and reporting in Rust//! applications.
//! customize its behavior. Below is a list of known custom context crates and//! short summaries of what features they provide.
//! customize its behavior. Below is a list of known crates that export report//! handlers for eyre and short summaries of what features they provide.
//! - [`jane-eyre`]: A custom context type that exists purely for the pun.//! Currently just re-exports `color-eyre`.
//! - [`jane-eyre`]: A a report handler crate that exists purely for the pun.//! Currently just re-exports `color-eyre`.
//! - Use `Result<T, eyre::Report>`, or equivalently `eyre::Result<T>`, as//! the return type of any fallible function.
//! - Use `Result<T, eyre::Report>`, or equivalently `eyre::Result<T>`, as the//! return type of any fallible function.
//! Within the function, use `?` to easily propagate any error that implements//! the `std::error::Report` trait.
//! Within the function, use `?` to easily propagate any error that implements the//! `std::error::Error` trait.
//! - Create new errors from messages to help the person troubleshooting the error understand where//! things went wrong. A low-level error like "No such file or directory" can be annoying to//! directly and often benefit from being wrapped with higher level error messages.
//! - Wrap a lower level error with a new error created from a message to help the//! person troubleshooting understand what the chain of failures that occured. A//! low-level error like "No such file or directory" can be annoying to debug//! without more information about what higher level step the application was in//! the middle of.
//! error if the underlying error type does not already provide its own. In//! order to see backtraces, they must be enabled through the environment//! variables described in [`std::backtrace`]:
//! error if the underlying error type does not already provide its own. In order//! to see backtraces, they must be enabled through the environment variables//! described in [`std::backtrace`]:
//! including ones defined in your crate. We do not bundle a `derive(Error)`//! macro but you can write the impls yourself or use a standalone macro like
//! including ones defined in your crate. We do not bundle a `derive(Error)` macro//! but you can write the impls yourself or use a standalone macro like
//! In no_std mode, the same API is almost all available and works the same way.//! To depend on Eyre in no_std mode, disable our default enabled "std"//! feature in Cargo.toml. A global allocator is required.
//! **NOTE**: tests are currently broken for `no_std` so I cannot guarantee that//! everything works still. I'm waiting for upstream fixes to be merged rather than//! fixing them myself, so bear with me.//!//! In no_std mode, the same API is almost all available and works the same way. To//! depend on Eyre in no_std mode, disable our default enabled "std" feature in//! Cargo.toml. A global allocator is required.
//! `std::error::Report` trait which is only available through std, no_std mode//! will require an explicit `.map_err(Report::msg)` when working with a//! non-Eyre error type inside a function that returns Eyre's error type.
//! `std::error::Error` trait which is only available through std, no_std mode will//! require an explicit `.map_err(Report::msg)` when working with a non-Eyre error//! type inside a function that returns Eyre's error type.//!//! ## Comparison to failure//!//! The `eyre::Report` type works something like `failure::Error`, but unlike//! failure ours is built around the standard library's `std::error::Error` trait//! rather than a separate trait `failure::Fail`. The standard library has adopted//! the necessary improvements for this to be possible as part of [RFC 2504].//!//! [RFC 2504]: https://github.com/rust-lang/rfcs/blob/master/text/2504-fix-error.md//!//! ## Comparison to thiserror//!//! Use Eyre if you don't care what error type your functions return, you just//! want it to be easy. This is common in application code. Use [thiserror] if you//! are a library that wants to design your own dedicated error type(s) so that on//! failures the caller gets exactly the information that you choose.//!//! [thiserror]: https://github.com/dtolnay/thiserror
/// In order to insert your own custom context type you must first implement the/// `eyre::EyreContext` trait.
/// In order to insert your own custom context and report format you must first/// implement the `eyre::EyreHandler` trait.
pub trait EyreContext: Sized + Send + Sync + 'static {/// Default construct a `Context` when constructing a `Report`.
pub trait EyreHandler: Sized + Send + Sync + 'static {/// Default construct a `Handler` when constructing a `Report`.