1#[cfg(feature = "std")]
2pub(crate) use std::backtrace::Backtrace;
3
4#[cfg(not(feature = "std"))]
5pub(crate) enum Backtrace {}
6
7#[cfg(feature = "std")]
8macro_rules! backtrace {
9 () => {
10 Some(std::backtrace::Backtrace::capture())
11 };
12}
13
14#[cfg(not(feature = "std"))]
15macro_rules! backtrace {
16 () => {
17 None
18 };
19}
20
21#[cfg(error_generic_member_access)]
22macro_rules! backtrace_if_absent {
23 ($err:expr) => {
24 match $crate::nightly::request_ref_backtrace($err as &dyn core::error::Error) {
25 Some(_) => None,
26 None => backtrace!(),
27 }
28 };
29}
30
31#[cfg(all(not(error_generic_member_access), feature = "std"))]
32macro_rules! backtrace_if_absent {
33 ($err:expr) => {
34 backtrace!()
35 };
36}
37
38#[cfg(all(not(anyhow_no_core_error), not(feature = "std")))]
39macro_rules! backtrace_if_absent {
40 ($err:expr) => {
41 None
42 };
43}
44
45fn _assert_send_sync() {
46 fn assert<T: Send + Sync>() {}
47 assert::<Backtrace>();
48}