1use std::ops::{Deref, DerefMut};
2
3
4
5pub 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
47pub 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
88pub 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}