summaryrefslogtreecommitdiffstats
path: root/vendor/anyhow/src/context.rs
diff options
context:
space:
mode:
Diffstat (limited to 'vendor/anyhow/src/context.rs')
-rw-r--r--vendor/anyhow/src/context.rs25
1 files changed, 13 insertions, 12 deletions
diff --git a/vendor/anyhow/src/context.rs b/vendor/anyhow/src/context.rs
index c2284130f..1b7dd31ac 100644
--- a/vendor/anyhow/src/context.rs
+++ b/vendor/anyhow/src/context.rs
@@ -4,7 +4,7 @@ use core::convert::Infallible;
use core::fmt::{self, Debug, Display, Write};
#[cfg(backtrace)]
-use std::backtrace::Backtrace;
+use std::any::Demand;
mod ext {
use super::*;
@@ -24,7 +24,7 @@ mod ext {
where
C: Display + Send + Sync + 'static,
{
- let backtrace = backtrace_if_absent!(self);
+ let backtrace = backtrace_if_absent!(&self);
Error::from_context(context, self, backtrace)
}
}
@@ -123,28 +123,29 @@ where
C: Display,
E: StdError + 'static,
{
- #[cfg(backtrace)]
- fn backtrace(&self) -> Option<&Backtrace> {
- self.error.backtrace()
- }
-
fn source(&self) -> Option<&(dyn StdError + 'static)> {
Some(&self.error)
}
+
+ #[cfg(backtrace)]
+ fn provide<'a>(&'a self, demand: &mut Demand<'a>) {
+ self.error.provide(demand);
+ }
}
impl<C> StdError for ContextError<C, Error>
where
C: Display,
{
- #[cfg(backtrace)]
- fn backtrace(&self) -> Option<&Backtrace> {
- Some(self.error.backtrace())
- }
-
fn source(&self) -> Option<&(dyn StdError + 'static)> {
Some(unsafe { crate::ErrorImpl::error(self.error.inner.by_ref()) })
}
+
+ #[cfg(backtrace)]
+ fn provide<'a>(&'a self, demand: &mut Demand<'a>) {
+ demand.provide_ref(self.error.backtrace());
+ self.error.provide(demand);
+ }
}
struct Quoted<C>(C);