errcraft 0.1.0

Beautiful, structured, and colorful error handling for Rust.
Documentation
//! Backtrace capture and filtering utilities.

use std::backtrace::Backtrace;

/// Captures a backtrace if `RUST_BACKTRACE` is set.
#[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
}

/// Formats a backtrace with optional filtering of system frames.
#[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;
    }

    // Filter out common system/stdlib frames to reduce noise
    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() {
        // Should return None if RUST_BACKTRACE is not set in test environment
        // (unless explicitly set)
        let bt = capture_if_enabled();
        // Just verify it doesn't panic
        let _ = bt;
    }
}