diff --git a/sentry-anyhow/Cargo.toml b/sentry-anyhow/Cargo.toml index 5da0f56ea..b0bdbd90a 100644 --- a/sentry-anyhow/Cargo.toml +++ b/sentry-anyhow/Cargo.toml @@ -11,10 +11,13 @@ Sentry integration for anyhow. """ edition = "2018" +[features] +backtrace = ["anyhow/backtrace"] + [dependencies] sentry-backtrace = { version = "0.22.0", path = "../sentry-backtrace" } sentry-core = { version = "0.22.0", path = "../sentry-core" } -anyhow = { version = "1.0.39", features = ["backtrace"] } +anyhow = "1.0.39" [dev-dependencies] sentry = { version = "0.22.0", path = "../sentry", default-features = false, features = ["test"] } diff --git a/sentry-anyhow/src/lib.rs b/sentry-anyhow/src/lib.rs index 5163b6480..1b6b4fcea 100644 --- a/sentry-anyhow/src/lib.rs +++ b/sentry-anyhow/src/lib.rs @@ -66,18 +66,25 @@ pub trait AnyhowHubExt { impl AnyhowHubExt for Hub { fn capture_anyhow(&self, anyhow_error: &anyhow::Error) -> Uuid { let dyn_err: &dyn std::error::Error = anyhow_error.as_ref(); - let mut event = sentry_core::event_from_error(dyn_err); - // exception records are sorted in reverse - if let Some(exc) = event.exception.iter_mut().last() { - let backtrace = anyhow_error.backtrace(); - exc.stacktrace = sentry_backtrace::parse_stacktrace(&format!("{:#}", backtrace)); - } + #[cfg(feature = "backtrace")] + { + let mut event = sentry_core::event_from_error(dyn_err); + + // exception records are sorted in reverse + if let Some(exc) = event.exception.iter_mut().last() { + let backtrace = anyhow_error.backtrace(); + exc.stacktrace = sentry_backtrace::parse_stacktrace(&format!("{:#}", backtrace)); + } - self.capture_event(event) + self.capture_event(event) + } + #[cfg(not(feature = "backtrace"))] + self.capture_error(dyn_err) } } +#[cfg(all(feature = "backtrace", test))] #[test] fn test_has_backtrace() { std::env::set_var("RUST_BACKTRACE", "1");