unsafe_send_sync/
lib.rs

1use std::ops::{Deref, DerefMut};
2
3
4
5/// A wrapper type that is always `Send`.
6pub struct UnsafeSend<T> {
7	pub i: T
8}
9unsafe impl<T> Send for UnsafeSend<T> {}
10
11impl<T> UnsafeSend<T> {
12	pub fn new( internal: T ) -> Self {
13		Self { i: internal }
14	}
15
16	pub fn unwrap( self ) -> T {
17		self.i
18	}
19}
20
21impl<T> Clone for UnsafeSend<T> where
22	T: Clone
23{
24	fn clone( &self ) -> Self {
25		Self::new( self.i.clone() )
26	}
27}
28
29impl<T> Default for UnsafeSend<T> where T: Default {
30	fn default() -> Self {
31		Self { i: T::default() }
32	}
33}
34
35impl<T> Deref for UnsafeSend<T> {
36	type Target = T;
37
38	fn deref( &self ) -> &Self::Target  { &self.i }
39}
40
41impl<T> DerefMut for UnsafeSend<T> {
42	fn deref_mut( &mut self ) -> &mut Self::Target  { &mut self.i }
43}
44
45
46
47/// A wrapper type that is always `Sync`.
48pub struct UnsafeSync<T> {
49	pub i: T
50}
51unsafe impl<T> Sync for UnsafeSync<T> {}
52
53impl<T> UnsafeSync<T> {
54	pub fn new( internal: T ) -> Self {
55		Self { i: internal }
56	}
57
58	pub fn unwrap( self ) -> T {
59		self.i
60	}
61}
62
63impl<T> Clone for UnsafeSync<T> where
64	T: Clone
65{
66	fn clone( &self ) -> Self {
67		Self::new( self.i.clone() )
68	}
69}
70
71
72impl<T> Default for UnsafeSync<T> where T: Default {
73	fn default() -> Self {
74		Self { i: T::default() }
75	}
76}
77
78impl<T> Deref for UnsafeSync<T> {
79	type Target = T;
80
81	fn deref( &self ) -> &Self::Target  { &self.i }
82}
83
84impl<T> DerefMut for UnsafeSync<T> {
85	fn deref_mut( &mut self ) -> &mut Self::Target  { &mut self.i }
86}
87
88/// A wrapper type that is always `Send` and `Sync`.
89pub struct UnsafeSendSync<T> {
90	pub i: T
91}
92unsafe impl<T> Send for UnsafeSendSync<T> {}
93unsafe impl<T> Sync for UnsafeSendSync<T> {}
94
95impl<T> UnsafeSendSync<T> {
96	pub fn new( internal: T ) -> Self {
97		Self { i: internal }
98	}
99
100	pub fn unwrap( self ) -> T { self.i }
101}
102
103impl<T> Default for UnsafeSendSync<T> where T: Default {
104	fn default() -> Self {
105		Self { i: T::default() }
106	}
107}
108
109impl<T> Deref for UnsafeSendSync<T> {
110	type Target = T;
111
112	fn deref( &self ) -> &Self::Target  { &self.i }
113}
114
115impl<T> DerefMut for UnsafeSendSync<T> {
116	fn deref_mut( &mut self ) -> &mut Self::Target  { &mut self.i }
117}
118
119impl<T> Clone for UnsafeSendSync<T> where
120	T: Clone
121{
122	fn clone( &self ) -> Self {
123		Self::new( self.i.clone() )
124	}
125}