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