3ZZ75E2AOF7DO3TMR422QV7ZXNYOQZTOGF67LVSCEMX6N75Y36LAC IPMYODUQCBXWWBP23CX5LCGRKEOOX7UCKYJALNPFS7DCX6NL4R7AC 6XBYIKVZHCOUS5XT2T3RQPCFG7SB6V33RLSKZFXTQMPINY5BMTTQC 45AUHCDJX5A54AYFMJRGDHKMBQ3WYBIPAVPDPY7TCLK5WN5TSROQC ZKAEZKAMMQWPQIV6X2CFQUUOG7RBJOE3MNXLBH4J3ZASUYTCZJAQC CITEDKPB6MKVZUEYEDE5ZKTNVY35HCOAXKDPYG7YLLEOVFNMSRXQC UC2L4AE6COAZGVMLTIV4INSNKRT2RGCEE6IRLOBKCBJZ3IV7GCRAC ZWBKKVT5TX2CSMBVEYZMQ6DLCXVHSD7SWFEKXWK6XKD6RP24MJJAC LNM226ITXRMWOSX6GOJ4HO72BWFRBDKQTEZMF4QUJUACUIOKIEJQC RFSCYZWH7VQUGHAM374YUDGZGM5S4KT6NXWDMHXL4767SCRSL2DQC EXRAFG37562NH775A4LDPP5FNKXLPLIZSJ3FCOBINUDKRFBJHCXAC GZZOJ7ZUSBPI3HXIV5UCFNMCDAMZPPLISY2UDV73FDN74HZ3AWJAC AP4JEVKMUJFBWFSOOSAYM3WHYPVNGQW2IMIQX3XXDER4OV4MYIIAC KCOCFOS6KMCTVS6K3WE6KOQSWC3QNWN2E36ASHQPP3Z3H4BHR3NQC UB53AXKRDBNRMOXEAJISW7G4IZLBBWIDW2GPHNGQVRBMFLVKWUTQC XA5ZC3I5O3VTK5LP3IYKWMC6C4F5WPLBPMC7N2JUYRMEKGBYONJAC NTM4ANW4APYTBQYTWJYYVETU2AFLRHUTHURDK5LYR3PHXGY3HMJQC CMUTTQVULRL5WISGIGHMKGLCKUG3YJRJCBIBNU7SMEJQXFQBAHWAC W655S25G7CGI4XOZ2PKITKTH26VJ4QMZFRV2RPYNI4KIUJOIGVMAC UPPVYBGC7MQBUCAAB6KW3R5KWHGASFTTXVUHEWRNP27SK3CI7UHQC A7XFGY27VWAUKSYMMLJBKXI7INEXFADJX376MPLLAB57UYHCYMNAC TOXJRHV7ZUPHWXCA4TAG3YRBTIPUZQ5BNX34D3VD2JAIYLRN6XSAC VWTWVVRECX62JABUZYFCTCPWTXXT3DB4635RIAGCKIQMGJ7VXRGAC W5YRNIBZIMTQLOKIBWBF7CHCIOLKXVHV7Y2AIKMKG7GCQSAVZKBAC A2YH3UCN3AEAXWW7IHTJBBQY4XRBSV2TBOX3N47ZZGKE6L7P7L5AC LX7EZ6TKJCQI3K7SV56WMTPFY672WN5UOBGXKKXQI7S73GMWNNXAC ZEYYSYM7QBZG4Q67AN3CHYZQWO2DVVHXRAK6NX44UQD6VO3JTK3AC A7XDW47SJ3ZYWRH64PLNI77XZTVX5FY6NX2LMT33L6BMUH3DYBMQC NPOFDGQF4CE72IZBT5Y7KPIBHWPPNOEPBYD5RTUHSVUJ2W4XFRVQC FI5C6CUHWX54GBVTIVMOO2E6KS4SMKMAZJULXGGVNST5QFZFHSMAC RQSDP2B2OVRFRJ33OZCVB4TYCQMSR3JZYG7FNA6TQ3HFABTGOGMQC GMOFRJTUHSZVX2U7Z7PVQDY45MQJQ7LTUIHCKHTCJJX2P6UH76ZAC BA4YE6QGRTYONATHUP347OFUBUCWXQPNZ6Q5DIQ2DLJLRZJ6AC4AC TI53BDDVHWRE4CCKWD23WO7VR4AMIDZZEXDEKEJY2AUJL2U6PSOQC LR3QQRO4ZFYYIY4JJ7LJIO4VUK3EWESPIAPLPPIP4W7N75PSVQHQC RF4MODRCRWKMUG26O222X3ZY3MLE6X7BYZDWEQRLVUITTWYAGNUAC IEMA7CQ74EKDOWZRKUCMJ5FIVAT42RMEQ5RUFM4WVNFYUNIAO7OAC SZMWAJGIDYMGTPMWSW22NLZ3VRXA2BATFUTMSWOGH337EFYBTWQAC VDKG76BAGMQUFQAVLRHYCDCWBMPTRMNJA4UWL2FSZVTHXOTQPQPQC 3LI5FAF5ULXOWBMTG4XCUOMUPVROSFDY6FWGE574OH4JGPMOPNVAC RIKD63GT7RFV3UAV4BYD57GFXKXALWUP6J7AAHB3M6JVAZ3WFTXAC F5QLL7RNKWB6DNLUZ7VKGTTYDVCH37YGR26SHZBIVAR37JJMQTXQC T64LKJ2RTUDFYSJQI7KF4WHZYXZHNEGNOS7ZMMCRIQZ4YN5LOOMAC Z4YYQXEE4OQPF22I4LD7RVQIBKK67AHCYR6C35MANUCIC4P3EPYQC CZP5PD5NYLDULLW43VOL6V75CH6DDEJO7H6JSGQSIV2WNSQF4A6QC 4SNDY6U7TDCVRCARTEQ7JLATJFDMUMEFV2GSLKMQJY7RFNPU5HDQC F5MLEQJFOB443KKN22TYYJN2TR52653MD4VXSEYZQBNWWJYES5VQC VSLQNAQBAGOJC2IV55V3W755UIPN47J4RTCCLCABRFFFUU5LT2JQC UR5XDZ3SS7QXSUFAYQDYUXX4QDROIYVXUH3Z24F6PAWJDNODAZYAC ZDN7BJ3JA3VL4AYWX3SV24GHP6NCAETJVAKAXKMIZTLHTWLUNMOQC DFDCD3LPJCYCNINXBXGFAYD4CT2SBI4RBITE7OK5D5QPTIWWMQKAC YNTEYSW7NVBWQLJU45XRK7AWQR5NWFOB4UUVVQ62ERZOO2QJJGAAC LT5DF4XJ7RZIHKUTFXAVVMGMGTEOQA3F2LWK4MGMZM6FPVZXUHBQC DCAJEW7O2H4N3I5EXTSBH7ALLV452CORUPJT3YQXY7QXQQIFDC4AC SG6KZY4MUKOBPA7BBFRGGZIP36HWQ3WXJACMLBCZ57RX2HCWHWRQC JDCRIWCKVBGA2FL7PEIXATYG4INEISAGC7DDY46WPVQTEUB6PBNQC MBJSV73XEUIBF7LU6MUYQJQLCRXYY7LXD7KZZFLLOCEDOKU2EAQAC OXKWHQFHTDDOWX3QDMHDWHCT3HFKWQS7Z7DEL3ILJBA7GNITA4GAC Q3TF6DU36OM4M4A72QPN74NRKH7CZBBKFAKLTJRPL5JD3LI5276QC HO72KYBN3DYN6EC2RQUW4YP3CFBSY4X3ULYLFA2HQ36S5QGTGKIQC K3KDTBCJ2D6AHLKDKSV7KTKXOXO72KZ5CXBVLCYSKDNRCJ3EGDMQC AOQSHDBY3FLBJBFEIJQDYHGQOBECTYRN3KPWJWQMCVWDTB6L2IRQC KQXMNV3RMRPSJCQVW4I2HSCFJQ6ZDRLNMJOTQI4MODB6UYA3ONQQC 7JZIPWVKXY3QA5QMTP24WPR7KKMMVXIHAQ4EGHNGCE7H4CRKROCAC JZK5OKKPI672GJNZPKKC3T35E6CUHBLT62YHCKMODOYDLVHU6BUQC W2HZHFIDFNDKTZ4CIRTZH6XWWV7KHHRROORVUCDNJQKEDQGUMK4QC WLYMZDSEPWVZKL7SEBWGTTXMM5MHIVTR4TPYVCEASATV5QNLPAMAC SG4SY6W7RKOROSFIHLOS6S57UY6IA5QGSAJV757RTRBPPO6KMAHAC WJWASFHAXBNMWHEXMKR53FLXPVUFVT44F2WKSJSA57V2UOZVSOJQC UEO5OKN446XCE2FHS6GFXYYL2D3YNJD6NI6QLMWO2QZAZKUCL2XQC TJQE7LZGYT5FUB6LR2GGKIV3BHXAAOP2V2SMYNLUNCZNQ4JNF5PAC WCPISJ4XXCQWQTGDUHPSEI6UFTAJHLAU54CAMOXXSVHQPLAV4DEAC R2FB5PBSU5SCGAQ33AKFG5WJ2T2L7ZDA4LDKTIKRMBGVA2ST5YPQC BZSTVYDVHJA3ZMCM3YTU4U5JKJC2JVUDM5APSBIGMSS54J2C4WKQC L5KQKEPFTGP2RH5PC6UIQQUKZFNKL7SIHEBIZ4WZHTYXGIBQHFYAC 62FAY63A6J5JJOX2RHKOWKFCJ6SHAPJT67CQ4ZJ7EXCPH6QVTW5QC QHM7TVRG4QX2IU2VW2G4GDGCE2PZ7HKRIHMF3BEBGND2BHZ5ANGQC 6KL7TFY4VYQ67TCMYG53KQV55EP6PHHN73BFVW6VSDI27CPHVY6QC object_mut: object_mut::<E>,object_boxed: object_boxed::<E>,object_downcast: object_downcast::<E>,object_drop_rest: object_drop_front::<E>,
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::<MessageError<M>>,object_boxed: object_boxed::<MessageError<M>>,object_downcast: object_downcast::<M>,object_drop_rest: object_drop_front::<M>,
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::<DisplayError<M>>,object_boxed: object_boxed::<DisplayError<M>>,object_downcast: object_downcast::<M>,object_drop_rest: object_drop_front::<M>,
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::<ContextError<C, E>>,object_boxed: object_boxed::<ContextError<C, E>>,object_downcast: context_downcast::<C, E>,object_drop_rest: context_drop_rest::<C, E>,
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::<BoxedError>,object_boxed: object_boxed::<BoxedError>,object_downcast: object_downcast::<Box<dyn StdError + Send + Sync>>,object_drop_rest: object_drop_front::<Box<dyn StdError + Send + Sync>>,
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::<ContextError<C, ErrReport>>,object_boxed: object_boxed::<ContextError<C, ErrReport>>,object_downcast: context_chain_downcast::<C>,object_drop_rest: context_chain_drop_rest::<C>,
object_mut: object_mut::<ContextError<D, ErrReport<C>>, C>,object_boxed: object_boxed::<ContextError<D, ErrReport<C>>, C>,object_downcast: context_chain_downcast::<D, C>,object_drop_rest: context_chain_drop_rest::<D, C>,
struct ErrorVTable {object_drop: unsafe fn(Box<ErrorImpl<()>>),object_ref: unsafe fn(&ErrorImpl<()>) -> &(dyn StdError + Send + Sync + 'static),
struct ErrorVTable<C>whereC: EyreContext,{object_drop: unsafe fn(Box<ErrorImpl<(), C>>),object_ref: unsafe fn(&ErrorImpl<(), C>) -> &(dyn StdError + Send + Sync + 'static),
object_mut: unsafe fn(&mut ErrorImpl<()>) -> &mut (dyn StdError + Send + Sync + 'static),object_boxed: unsafe fn(Box<ErrorImpl<()>>) -> Box<dyn StdError + Send + Sync + 'static>,object_downcast: unsafe fn(&ErrorImpl<()>, TypeId) -> Option<NonNull<()>>,object_drop_rest: unsafe fn(Box<ErrorImpl<()>>, TypeId),
object_mut: unsafe fn(&mut ErrorImpl<(), C>) -> &mut (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),
if TypeId::of::<C>() == target {let unerased = e as *const ErrorImpl<()> as *const ErrorImpl<ContextError<C, E>>;let addr = &(*unerased)._object.context as *const C as *mut ();
if TypeId::of::<D>() == target {let unerased = e as *const ErrorImpl<(), C> as *const ErrorImpl<ContextError<D, E>, C>;let addr = &(*unerased)._object.msg as *const D as *mut ();
// Safety: requires layout of *e to match ErrorImpl<ContextError<C, ErrReport>>.unsafe fn context_chain_downcast<C>(e: &ErrorImpl<()>, target: TypeId) -> Option<NonNull<()>>
// Safety: requires layout of *e to match ErrorImpl<ContextError<D, ErrReport>>.unsafe fn context_chain_downcast<D, C>(e: &ErrorImpl<(), C>, target: TypeId) -> Option<NonNull<()>>
if TypeId::of::<C>() == target {let unerased = e as *const ErrorImpl<()> as *const ErrorImpl<ContextError<C, ErrReport>>;let addr = &(*unerased)._object.context as *const C as *mut ();
if TypeId::of::<D>() == target {let unerased = e as *const ErrorImpl<(), C> as *const ErrorImpl<ContextError<D, ErrReport<C>>, C>;let addr = &(*unerased)._object.msg as *const D as *mut ();
// Safety: requires layout of *e to match ErrorImpl<ContextError<C, ErrReport>>.unsafe fn context_chain_drop_rest<C>(e: Box<ErrorImpl<()>>, target: TypeId)
// Safety: requires layout of *e to match ErrorImpl<ContextError<D, ErrReport>>.unsafe fn context_chain_drop_rest<D, C>(e: Box<ErrorImpl<(), C>>, target: TypeId)
pub(crate) struct ErrorImpl<E> {vtable: &'static ErrorVTable,backtrace: Option<Backtrace>,
pub(crate) struct ErrorImpl<E, C>whereC: EyreContext,{vtable: &'static ErrorVTable<C>,context: C,
// repr C to ensure that ContextError<C, E> has the same layout as// ContextError<ManuallyDrop<C>, E> and ContextError<C, ManuallyDrop<E>>.
// repr C to ensure that ContextError<D, E> has the same layout as// ContextError<ManuallyDrop<D>, E> and ContextError<D, ManuallyDrop<E>>.
pub fn new(self, error: Box<dyn StdError + Send + Sync>) -> ErrReport {let backtrace = backtrace_if_absent!(error);ErrReport::from_boxed(error, backtrace)
pub fn new<C: EyreContext>(self, error: Box<dyn StdError + Send + Sync>) -> ErrReport<C> {ErrReport::from_boxed(error)
pub struct ErrReport {inner: ManuallyDrop<Box<ErrorImpl<()>>>,
pub struct ErrReport<C = DefaultContext>whereC: EyreContext,{inner: ManuallyDrop<Box<ErrorImpl<(), C>>>,}pub trait EyreContext: Sized + Send + Sync + 'static {fn default(err: &(dyn std::error::Error + 'static)) -> Self;fn context_raw(&self, typeid: TypeId) -> Option<&dyn Any>;}pub struct DefaultContext {backtrace: Option<Backtrace>,}impl EyreContext for DefaultContext {fn default(error: &(dyn std::error::Error + 'static)) -> Self {let backtrace = backtrace_if_absent!(error);Self {backtrace}}fn context_raw(&self, typid: TypeId) -> Option<&dyn Any> {match typid {t if t == TypeId::of::<Backtrace>() => self.backtrace.as_ref().map(|b| b as &dyn Any),_ => None,}}