git_trim/
util.rs

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