obeli-sk-utils 0.36.1

Internal package of obelisk
Documentation
pub fn tracing_panic_hook(panic_info: &std::panic::PanicHookInfo) {
    let payload = panic_info.payload();
    #[expect(clippy::manual_map)]
    let payload = if let Some(s) = payload.downcast_ref::<&str>() {
        Some(&**s)
    } else if let Some(s) = payload.downcast_ref::<String>() {
        Some(s.as_str())
    } else {
        None
    }
    .unwrap_or_default();
    let location = panic_info.location().map(ToString::to_string);
    let backtrace = std::backtrace::Backtrace::capture();
    if backtrace.status() == std::backtrace::BacktraceStatus::Captured {
        if tracing::enabled!(tracing::Level::ERROR) {
            tracing::error!(
                panic.location = location,
                "A panic occurred: `{payload}` {backtrace}"
            );
        } else {
            eprintln!("A panic occurred: `{payload}`\n{backtrace}");
        }
    } else if tracing::enabled!(tracing::Level::ERROR) {
        tracing::error!(panic.location = location, "A panic occurred: `{payload}`",);
    } else {
        eprintln!("A panic occurred: `{payload}`");
        eprintln!("A panic occurred");
    }
}