crdb_core/
dyn_sized.rs

1use std::{any::Any, sync::Arc};
2
3pub trait DynSized: 'static + Any + Send + Sync + deepsize::DeepSizeOf {
4    // TODO(blocked): remove these functions once rust supports trait upcasting:
5    // https://github.com/rust-lang/rust/issues/65991#issuecomment-1869869919
6    // https://github.com/rust-lang/rust/issues/119335
7    fn arc_to_any(self: Arc<Self>) -> Arc<dyn Any + Send + Sync>;
8    fn ref_to_any(&self) -> &(dyn Any + Send + Sync);
9    fn deep_size_of(&self) -> usize;
10}
11impl<T: 'static + Any + Send + Sync + deepsize::DeepSizeOf> DynSized for T {
12    fn arc_to_any(self: Arc<Self>) -> Arc<dyn Any + Send + Sync> {
13        self
14    }
15
16    fn ref_to_any(&self) -> &(dyn Any + Send + Sync) {
17        self
18    }
19
20    fn deep_size_of(&self) -> usize {
21        <Self as deepsize::DeepSizeOf>::deep_size_of(self)
22    }
23}