• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use pin_project::pin_project;
2 # [pin (__private (project = EnumProj , project_ref = EnumProjRef , project_replace = EnumProjOwn))]
3 enum Enum<T, U> {
4     Struct {
5         #[pin]
6         pinned1: T,
7         #[pin]
8         pinned2: T,
9         unpinned1: U,
10         unpinned2: U,
11     },
12     Tuple(#[pin] T, #[pin] T, U, U),
13     Unit,
14 }
15 #[allow(box_pointers)]
16 #[allow(deprecated)]
17 #[allow(explicit_outlives_requirements)]
18 #[allow(single_use_lifetimes)]
19 #[allow(unreachable_pub)]
20 #[allow(clippy::unknown_clippy_lints)]
21 #[allow(clippy::pattern_type_mismatch)]
22 #[allow(clippy::redundant_pub_crate)]
23 #[allow(clippy::type_repetition_in_bounds)]
24 #[allow(dead_code)]
25 #[allow(clippy::mut_mut)]
26 enum EnumProj<'pin, T, U>
27 where
28     Enum<T, U>: 'pin,
29 {
30     Struct {
31         pinned1: ::pin_project::__private::Pin<&'pin mut (T)>,
32         pinned2: ::pin_project::__private::Pin<&'pin mut (T)>,
33         unpinned1: &'pin mut (U),
34         unpinned2: &'pin mut (U),
35     },
36     Tuple(
37         ::pin_project::__private::Pin<&'pin mut (T)>,
38         ::pin_project::__private::Pin<&'pin mut (T)>,
39         &'pin mut (U),
40         &'pin mut (U),
41     ),
42     Unit,
43 }
44 #[allow(box_pointers)]
45 #[allow(deprecated)]
46 #[allow(explicit_outlives_requirements)]
47 #[allow(single_use_lifetimes)]
48 #[allow(unreachable_pub)]
49 #[allow(clippy::unknown_clippy_lints)]
50 #[allow(clippy::pattern_type_mismatch)]
51 #[allow(clippy::redundant_pub_crate)]
52 #[allow(clippy::type_repetition_in_bounds)]
53 #[allow(dead_code)]
54 #[allow(clippy::ref_option_ref)]
55 enum EnumProjRef<'pin, T, U>
56 where
57     Enum<T, U>: 'pin,
58 {
59     Struct {
60         pinned1: ::pin_project::__private::Pin<&'pin (T)>,
61         pinned2: ::pin_project::__private::Pin<&'pin (T)>,
62         unpinned1: &'pin (U),
63         unpinned2: &'pin (U),
64     },
65     Tuple(
66         ::pin_project::__private::Pin<&'pin (T)>,
67         ::pin_project::__private::Pin<&'pin (T)>,
68         &'pin (U),
69         &'pin (U),
70     ),
71     Unit,
72 }
73 #[allow(box_pointers)]
74 #[allow(deprecated)]
75 #[allow(explicit_outlives_requirements)]
76 #[allow(single_use_lifetimes)]
77 #[allow(unreachable_pub)]
78 #[allow(clippy::unknown_clippy_lints)]
79 #[allow(clippy::pattern_type_mismatch)]
80 #[allow(clippy::redundant_pub_crate)]
81 #[allow(clippy::type_repetition_in_bounds)]
82 #[allow(dead_code)]
83 #[allow(variant_size_differences)]
84 #[allow(clippy::large_enum_variant)]
85 enum EnumProjOwn<T, U> {
86     Struct {
87         pinned1: ::pin_project::__private::PhantomData<T>,
88         pinned2: ::pin_project::__private::PhantomData<T>,
89         unpinned1: U,
90         unpinned2: U,
91     },
92     Tuple(
93         ::pin_project::__private::PhantomData<T>,
94         ::pin_project::__private::PhantomData<T>,
95         U,
96         U,
97     ),
98     Unit,
99 }
100 #[allow(box_pointers)]
101 #[allow(deprecated)]
102 #[allow(explicit_outlives_requirements)]
103 #[allow(single_use_lifetimes)]
104 #[allow(unreachable_pub)]
105 #[allow(clippy::unknown_clippy_lints)]
106 #[allow(clippy::pattern_type_mismatch)]
107 #[allow(clippy::redundant_pub_crate)]
108 #[allow(clippy::type_repetition_in_bounds)]
109 #[allow(unused_qualifications)]
110 #[allow(clippy::semicolon_if_nothing_returned)]
111 #[allow(clippy::use_self)]
112 #[allow(clippy::used_underscore_binding)]
113 const _: () = {
114     #[allow(unused_extern_crates)]
115     extern crate pin_project as _pin_project;
116     impl<T, U> Enum<T, U> {
project<'pin>( self: _pin_project::__private::Pin<&'pin mut Self>, ) -> EnumProj<'pin, T, U>117         fn project<'pin>(
118             self: _pin_project::__private::Pin<&'pin mut Self>,
119         ) -> EnumProj<'pin, T, U> {
120             unsafe {
121                 match self.get_unchecked_mut() {
122                     Self::Struct {
123                         pinned1,
124                         pinned2,
125                         unpinned1,
126                         unpinned2,
127                     } => EnumProj::Struct {
128                         pinned1: _pin_project::__private::Pin::new_unchecked(pinned1),
129                         pinned2: _pin_project::__private::Pin::new_unchecked(pinned2),
130                         unpinned1,
131                         unpinned2,
132                     },
133                     Self::Tuple(_0, _1, _2, _3) => EnumProj::Tuple(
134                         _pin_project::__private::Pin::new_unchecked(_0),
135                         _pin_project::__private::Pin::new_unchecked(_1),
136                         _2,
137                         _3,
138                     ),
139                     Self::Unit => EnumProj::Unit,
140                 }
141             }
142         }
143         #[allow(clippy::missing_const_for_fn)]
project_ref<'pin>( self: _pin_project::__private::Pin<&'pin Self>, ) -> EnumProjRef<'pin, T, U>144         fn project_ref<'pin>(
145             self: _pin_project::__private::Pin<&'pin Self>,
146         ) -> EnumProjRef<'pin, T, U> {
147             unsafe {
148                 match self.get_ref() {
149                     Self::Struct {
150                         pinned1,
151                         pinned2,
152                         unpinned1,
153                         unpinned2,
154                     } => EnumProjRef::Struct {
155                         pinned1: _pin_project::__private::Pin::new_unchecked(pinned1),
156                         pinned2: _pin_project::__private::Pin::new_unchecked(pinned2),
157                         unpinned1,
158                         unpinned2,
159                     },
160                     Self::Tuple(_0, _1, _2, _3) => EnumProjRef::Tuple(
161                         _pin_project::__private::Pin::new_unchecked(_0),
162                         _pin_project::__private::Pin::new_unchecked(_1),
163                         _2,
164                         _3,
165                     ),
166                     Self::Unit => EnumProjRef::Unit,
167                 }
168             }
169         }
project_replace( self: _pin_project::__private::Pin<&mut Self>, __replacement: Self, ) -> EnumProjOwn<T, U>170         fn project_replace(
171             self: _pin_project::__private::Pin<&mut Self>,
172             __replacement: Self,
173         ) -> EnumProjOwn<T, U> {
174             unsafe {
175                 let __self_ptr: *mut Self = self.get_unchecked_mut();
176                 let __guard =
177                     _pin_project::__private::UnsafeOverwriteGuard::new(__self_ptr, __replacement);
178                 match &mut *__self_ptr {
179                     Self::Struct {
180                         pinned1,
181                         pinned2,
182                         unpinned1,
183                         unpinned2,
184                     } => {
185                         let __result = EnumProjOwn::Struct {
186                             pinned1: _pin_project::__private::PhantomData,
187                             pinned2: _pin_project::__private::PhantomData,
188                             unpinned1: _pin_project::__private::ptr::read(unpinned1),
189                             unpinned2: _pin_project::__private::ptr::read(unpinned2),
190                         };
191                         {
192                             let __guard =
193                                 _pin_project::__private::UnsafeDropInPlaceGuard::new(pinned2);
194                             let __guard =
195                                 _pin_project::__private::UnsafeDropInPlaceGuard::new(pinned1);
196                         }
197                         __result
198                     }
199                     Self::Tuple(_0, _1, _2, _3) => {
200                         let __result = EnumProjOwn::Tuple(
201                             _pin_project::__private::PhantomData,
202                             _pin_project::__private::PhantomData,
203                             _pin_project::__private::ptr::read(_2),
204                             _pin_project::__private::ptr::read(_3),
205                         );
206                         {
207                             let __guard = _pin_project::__private::UnsafeDropInPlaceGuard::new(_1);
208                             let __guard = _pin_project::__private::UnsafeDropInPlaceGuard::new(_0);
209                         }
210                         __result
211                     }
212                     Self::Unit => {
213                         let __result = EnumProjOwn::Unit;
214                         {}
215                         __result
216                     }
217                 }
218             }
219         }
220     }
221     #[allow(missing_debug_implementations)]
222     struct __Enum<'pin, T, U> {
223         __pin_project_use_generics: _pin_project::__private::AlwaysUnpin<
224             'pin,
225             (
226                 _pin_project::__private::PhantomData<T>,
227                 _pin_project::__private::PhantomData<U>,
228             ),
229         >,
230         __field0: T,
231         __field1: T,
232         __field2: T,
233         __field3: T,
234     }
235     impl<'pin, T, U> _pin_project::__private::Unpin for Enum<T, U> where
236         __Enum<'pin, T, U>: _pin_project::__private::Unpin
237     {
238     }
239     #[doc(hidden)]
240     unsafe impl<'pin, T, U> _pin_project::UnsafeUnpin for Enum<T, U> where
241         __Enum<'pin, T, U>: _pin_project::__private::Unpin
242     {
243     }
244     trait EnumMustNotImplDrop {}
245     #[allow(clippy::drop_bounds, drop_bounds)]
246     impl<T: _pin_project::__private::Drop> EnumMustNotImplDrop for T {}
247     impl<T, U> EnumMustNotImplDrop for Enum<T, U> {}
248     #[doc(hidden)]
249     impl<T, U> _pin_project::__private::PinnedDrop for Enum<T, U> {
drop(self: _pin_project::__private::Pin<&mut Self>)250         unsafe fn drop(self: _pin_project::__private::Pin<&mut Self>) {}
251     }
252 };
main()253 fn main() {}
254