pub use backtrace::{Backtrace, BacktraceFrame};
const FILTER_PATHS: &[&str] = &["/.cargo/registry/", "/.rustup/toolchains/"];
pub fn resolve_and_filter(mut backtrace: Backtrace) -> Backtrace {
backtrace.resolve();
let frames: Vec<BacktraceFrame> = backtrace.into();
let iter = frames.into_iter().filter(|frame| {
let Some(symbol) = frame.symbols().first() else { return false };
if symbol.name().map(|s| s.to_string()).as_deref() == Some("_main") {
return false;
}
if let Some(filepath) = symbol.filename().and_then(|name| name.to_str()) {
if filepath.starts_with("/rustc/") {
return false;
}
for component in FILTER_PATHS {
if filepath.contains(component) {
return false;
}
}
}
true
});
Backtrace::from(iter.collect::<Vec<_>>())
}