abstutil/
clone.rs

1use std::any::Any;
2
3/// Trick to make a cloneable Any from
4/// https://stackoverflow.com/questions/30353462/how-to-clone-a-struct-storing-a-boxed-trait-object/30353928#30353928.
5pub 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> {}