trait_bound_typemap/trait_maps/
clone_send_sync_typemap.rs

1use crate::impl_typemap;
2use multi_trait_object::{MultitraitObject, RawClone, TryClone};
3use std::any::TypeId;
4use std::collections::HashMap;
5
6impl_typemap!(
7    /// A typemap that implements Clone and is Send + Sync
8    CloneSendSyncTypeMap,
9    CloneSendSyncTypeMapKey,
10    RawClone,
11    Send,
12    Sync
13);
14
15impl Clone for CloneSendSyncTypeMap {
16    fn clone(&self) -> Self {
17        let map = self
18            .0
19             .0
20            .iter()
21            .map(|(tid, mto)| (tid.clone(), mto.try_clone().unwrap()))
22            .collect::<HashMap<TypeId, MultitraitObject>>();
23
24        Self(crate::type_indexed::TypeIndexedMap(map))
25    }
26}
27
28unsafe impl Send for CloneSendSyncTypeMap {}
29unsafe impl Sync for CloneSendSyncTypeMap {}