1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
use std::ops::Deref; /// Use with caution. /// It makes wrapping type T to be Send + Sync. /// Make sure T is semantically Send + Sync #[derive(Copy, Clone)] pub struct ForceSendSync<T>(T); unsafe impl<T> Sync for ForceSendSync<T> {} unsafe impl<T> Send for ForceSendSync<T> {} impl<T> ForceSendSync<T> { pub fn new(value: T) -> Self { Self(value) } pub fn unwrap(self) -> T { self.0 } } impl<T> Deref for ForceSendSync<T> { type Target = T; fn deref(&self) -> &Self::Target { &self.0 } }