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}