use std::any::Any;
pub struct TrxToken {
inner: Box<dyn Any + Send + Sync>,
}
impl TrxToken {
pub fn new<T: Any + Send + Sync>(inner: T) -> Self {
Self {
inner: Box::new(inner),
}
}
pub fn downcast_ref<T: Any + Send + Sync>(&self) -> Option<&T> {
self.inner.downcast_ref::<T>()
}
pub fn downcast<T: Any + Send + Sync>(self) -> Result<T, Self> {
match self.inner.downcast::<T>() {
Ok(val) => Ok(*val),
Err(inner) => Err(Self { inner }),
}
}
}
impl std::fmt::Debug for TrxToken {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("TrxToken")
.field("inner_type_id", &(*self.inner).type_id())
.finish()
}
}