• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 use pin_project_lite::pin_project;
2 enum Enum<T, U> {
3     Struct { pinned: T, unpinned: U },
4     Unit,
5 }
6 #[doc(hidden)]
7 #[allow(
8     dead_code,
9     single_use_lifetimes,
10     clippy::unknown_clippy_lints,
11     clippy::absolute_paths,
12     clippy::min_ident_chars,
13     clippy::mut_mut,
14     clippy::redundant_pub_crate,
15     clippy::ref_option_ref,
16     clippy::single_char_lifetime_names,
17     clippy::type_repetition_in_bounds
18 )]
19 enum EnumProj<'__pin, T, U>
20 where
21     Enum<T, U>: '__pin,
22 {
23     Struct {
24         pinned: ::pin_project_lite::__private::Pin<&'__pin mut (T)>,
25         unpinned: &'__pin mut (U),
26     },
27     Unit,
28 }
29 #[doc(hidden)]
30 #[allow(
31     dead_code,
32     single_use_lifetimes,
33     clippy::unknown_clippy_lints,
34     clippy::absolute_paths,
35     clippy::min_ident_chars,
36     clippy::mut_mut,
37     clippy::redundant_pub_crate,
38     clippy::ref_option_ref,
39     clippy::single_char_lifetime_names,
40     clippy::type_repetition_in_bounds
41 )]
42 enum EnumProjRef<'__pin, T, U>
43 where
44     Enum<T, U>: '__pin,
45 {
46     Struct {
47         pinned: ::pin_project_lite::__private::Pin<&'__pin (T)>,
48         unpinned: &'__pin (U),
49     },
50     Unit,
51 }
52 #[doc(hidden)]
53 #[allow(
54     dead_code,
55     single_use_lifetimes,
56     clippy::unknown_clippy_lints,
57     clippy::absolute_paths,
58     clippy::min_ident_chars,
59     clippy::mut_mut,
60     clippy::redundant_pub_crate,
61     clippy::single_char_lifetime_names,
62     clippy::type_repetition_in_bounds
63 )]
64 enum EnumProjReplace<T, U> {
65     Struct { pinned: ::pin_project_lite::__private::PhantomData<T>, unpinned: U },
66     Unit,
67 }
68 #[allow(
69     single_use_lifetimes,
70     clippy::unknown_clippy_lints,
71     clippy::absolute_paths,
72     clippy::min_ident_chars,
73     clippy::single_char_lifetime_names,
74     clippy::used_underscore_binding
75 )]
76 const _: () = {
77     impl<T, U> Enum<T, U> {
78         #[doc(hidden)]
79         #[inline]
project<'__pin>( self: ::pin_project_lite::__private::Pin<&'__pin mut Self>, ) -> EnumProj<'__pin, T, U>80         fn project<'__pin>(
81             self: ::pin_project_lite::__private::Pin<&'__pin mut Self>,
82         ) -> EnumProj<'__pin, T, U> {
83             unsafe {
84                 match self.get_unchecked_mut() {
85                     Self::Struct { pinned, unpinned } => {
86                         EnumProj::Struct {
87                             pinned: ::pin_project_lite::__private::Pin::new_unchecked(
88                                 pinned,
89                             ),
90                             unpinned: unpinned,
91                         }
92                     }
93                     Self::Unit => EnumProj::Unit,
94                 }
95             }
96         }
97         #[doc(hidden)]
98         #[inline]
project_ref<'__pin>( self: ::pin_project_lite::__private::Pin<&'__pin Self>, ) -> EnumProjRef<'__pin, T, U>99         fn project_ref<'__pin>(
100             self: ::pin_project_lite::__private::Pin<&'__pin Self>,
101         ) -> EnumProjRef<'__pin, T, U> {
102             unsafe {
103                 match self.get_ref() {
104                     Self::Struct { pinned, unpinned } => {
105                         EnumProjRef::Struct {
106                             pinned: ::pin_project_lite::__private::Pin::new_unchecked(
107                                 pinned,
108                             ),
109                             unpinned: unpinned,
110                         }
111                     }
112                     Self::Unit => EnumProjRef::Unit,
113                 }
114             }
115         }
116         #[doc(hidden)]
117         #[inline]
project_replace( self: ::pin_project_lite::__private::Pin<&mut Self>, replacement: Self, ) -> EnumProjReplace<T, U>118         fn project_replace(
119             self: ::pin_project_lite::__private::Pin<&mut Self>,
120             replacement: Self,
121         ) -> EnumProjReplace<T, U> {
122             unsafe {
123                 let __self_ptr: *mut Self = self.get_unchecked_mut();
124                 let __guard = ::pin_project_lite::__private::UnsafeOverwriteGuard::new(
125                     __self_ptr,
126                     replacement,
127                 );
128                 match &mut *__self_ptr {
129                     Self::Struct { pinned, unpinned } => {
130                         let result = EnumProjReplace::Struct {
131                             pinned: ::pin_project_lite::__private::PhantomData,
132                             unpinned: ::pin_project_lite::__private::ptr::read(unpinned),
133                         };
134                         {
135                             (
136                                 ::pin_project_lite::__private::UnsafeDropInPlaceGuard::new(
137                                     pinned,
138                                 ),
139                                 (),
140                             );
141                         }
142                         result
143                     }
144                     Self::Unit => EnumProjReplace::Unit,
145                 }
146             }
147         }
148     }
149     #[allow(non_snake_case)]
150     struct __Origin<'__pin, T, U> {
151         __dummy_lifetime: ::pin_project_lite::__private::PhantomData<&'__pin ()>,
152         Struct: (T, ::pin_project_lite::__private::AlwaysUnpin<U>),
153         Unit: (),
154     }
155     impl<'__pin, T, U> ::pin_project_lite::__private::Unpin for Enum<T, U>
156     where
157         ::pin_project_lite::__private::PinnedFieldsOf<
158             __Origin<'__pin, T, U>,
159         >: ::pin_project_lite::__private::Unpin,
160     {}
161     trait MustNotImplDrop {}
162     #[allow(clippy::drop_bounds, drop_bounds)]
163     impl<T: ::pin_project_lite::__private::Drop> MustNotImplDrop for T {}
164     impl<T, U> MustNotImplDrop for Enum<T, U> {}
165 };
main()166 fn main() {}
167