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}