saola_panic_utils/lib.rs
1use std::{any::Any, borrow::Cow};
2
3/// Downcasts a boxed [`Any`] from a panic payload to a string.
4pub fn downcast_box_to_string(object: Box<dyn Any>) -> Option<Cow<'static, str>> {
5 object
6 .downcast::<&'static str>()
7 .map(|s| Cow::Borrowed(*s))
8 .or_else(|object| object.downcast::<String>().map(|s| Cow::Owned(*s)))
9 .ok()
10}
11
12/// Downcasts a reference to [`Any`] from panic info hook to a string.
13pub fn downcast_ref_to_string(object: &dyn Any) -> Option<&str> {
14 object
15 .downcast_ref::<&str>()
16 .copied()
17 .or_else(|| object.downcast_ref::<String>().map(|s| s.as_str()))
18}