obeli_sk_utils/
lib.rs

1pub mod sha256sum;
2#[cfg(feature = "test")]
3pub mod testing_fn_registry;
4pub mod wasm_tools;
5mod wit;
6
7pub fn tracing_panic_hook(panic_info: &std::panic::PanicHookInfo) {
8    let payload = panic_info.payload();
9    #[expect(clippy::manual_map)]
10    let payload = if let Some(s) = payload.downcast_ref::<&str>() {
11        Some(&**s)
12    } else if let Some(s) = payload.downcast_ref::<String>() {
13        Some(s.as_str())
14    } else {
15        None
16    };
17    let location = panic_info.location().map(ToString::to_string);
18    let backtrace = std::backtrace::Backtrace::capture();
19    if backtrace.status() == std::backtrace::BacktraceStatus::Captured {
20        tracing::error!(
21            panic.payload = payload,
22            panic.location = location,
23            "A panic occurred: {backtrace}"
24        );
25        if let Some(payload) = payload {
26            eprintln!("A panic occurred: {payload}\n{backtrace}");
27        } else {
28            eprintln!("A panic occurred\n{backtrace}");
29        }
30    } else {
31        tracing::error!(
32            panic.payload = payload,
33            panic.location = location,
34            "A panic occurred",
35        );
36        if let Some(payload) = payload {
37            eprintln!("A panic occurred: {payload}");
38        } else {
39            eprintln!("A panic occurred");
40        }
41    }
42}