1use std::{any::Any, fmt};
2
3use dyn_clone::DynClone;
4
5pub trait DataAny: Any + Send + Sync + DynClone {
6 fn as_any(&self) -> &dyn Any;
7
8 fn into_any(self: Box<Self>) -> Box<dyn Any>;
9}
10
11impl<T> DataAny for T
12where
13 T: Any + Send + Sync + DynClone,
14{
15 fn as_any(&self) -> &dyn Any { self }
16
17 fn into_any(self: Box<Self>) -> Box<dyn Any> { self }
18}
19
20impl Clone for Box<dyn DataAny> {
21 fn clone(&self) -> Self { dyn_clone::clone_box(&**self) }
22}
23
24impl fmt::Debug for dyn DataAny {
25 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
26 f.debug_struct("DataAny").finish_non_exhaustive()
27 }
28}