//! This module contains a type that can make `Send + !Sync` types `Sync` by //! disallowing all immutable access to the value. //! //! A similar primitive is provided in the `sync_wrapper` crate. pub(crate) struct SyncWrapper { value: T, } // safety: The SyncWrapper being send allows you to send the inner value across // thread boundaries. unsafe impl Send for SyncWrapper {} // safety: An immutable reference to a SyncWrapper is useless, so moving such an // immutable reference across threads is safe. unsafe impl Sync for SyncWrapper {} impl SyncWrapper { pub(crate) fn new(value: T) -> Self { Self { value } } pub(crate) fn into_inner(self) -> T { self.value } }