refslots 0.1.0

Reference-counted handles to slots in a slotmap
Documentation
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<_>>())
}