use std::backtrace::Backtrace;
#[allow(dead_code)]
pub fn capture_if_enabled() -> Option<Backtrace> {
if std::env::var("RUST_BACKTRACE").is_ok() {
let bt = Backtrace::capture();
if bt.status() == std::backtrace::BacktraceStatus::Captured {
return Some(bt);
}
}
None
}
#[allow(dead_code)]
pub fn format_backtrace(bt: &Backtrace, filter_system: bool) -> String {
let bt_str = bt.to_string();
if !filter_system {
return bt_str;
}
bt_str
.lines()
.filter(|line| {
!line.contains("std::sys::")
&& !line.contains("std::panicking::")
&& !line.contains("core::ops::function::")
&& !line.contains("rust_begin_unwind")
})
.collect::<Vec<_>>()
.join("\n")
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_capture_if_enabled() {
let bt = capture_if_enabled();
let _ = bt;
}
}