1use std::any::Any;
2
3pub trait CloneableAny: CloneableImpl {}
6
7pub trait CloneableImpl {
8 fn clone_box(&self) -> Box<dyn CloneableAny>;
9 fn as_any(&self) -> &dyn Any;
10}
11
12impl<T> CloneableImpl for T
13where
14 T: 'static + CloneableAny + Clone,
15{
16 fn clone_box(&self) -> Box<dyn CloneableAny> {
17 Box::new(self.clone())
18 }
19
20 fn as_any(&self) -> &dyn Any {
21 self
22 }
23}
24
25impl Clone for Box<dyn CloneableAny> {
26 fn clone(&self) -> Box<dyn CloneableAny> {
27 self.clone_box()
28 }
29}
30
31impl<T: 'static + Clone> CloneableAny for Vec<T> {}