1 2 3 4 5 6 7 8 9 10 11 12
pub fn try_downcast<T, K>(k: K) -> Result<T, K> where T: 'static, K: Send + 'static, { let mut k = Some(k); if let Some(k) = <dyn std::any::Any>::downcast_mut::<Option<T>>(&mut k) { Ok(k.take().unwrap()) } else { Err(k.unwrap()) } }