1 use pin_project_lite::pin_project;
2 enum Enum<T, U> {
3 Struct { pinned1: T, pinned2: T, unpinned1: U, unpinned2: 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::single_char_lifetime_names,
16 clippy::type_repetition_in_bounds
17 )]
18 enum EnumProjReplace<T, U> {
19 Struct {
20 pinned1: ::pin_project_lite::__private::PhantomData<T>,
21 pinned2: ::pin_project_lite::__private::PhantomData<T>,
22 unpinned1: U,
23 unpinned2: U,
24 },
25 Unit,
26 }
27 #[allow(
28 single_use_lifetimes,
29 clippy::unknown_clippy_lints,
30 clippy::absolute_paths,
31 clippy::min_ident_chars,
32 clippy::single_char_lifetime_names,
33 clippy::used_underscore_binding
34 )]
35 const _: () = {
36 impl<T, U> Enum<T, U> {
37 #[doc(hidden)]
38 #[inline]
project_replace( self: ::pin_project_lite::__private::Pin<&mut Self>, replacement: Self, ) -> EnumProjReplace<T, U>39 fn project_replace(
40 self: ::pin_project_lite::__private::Pin<&mut Self>,
41 replacement: Self,
42 ) -> EnumProjReplace<T, U> {
43 unsafe {
44 let __self_ptr: *mut Self = self.get_unchecked_mut();
45 let __guard = ::pin_project_lite::__private::UnsafeOverwriteGuard::new(
46 __self_ptr,
47 replacement,
48 );
49 match &mut *__self_ptr {
50 Self::Struct { pinned1, pinned2, unpinned1, unpinned2 } => {
51 let result = EnumProjReplace::Struct {
52 pinned1: ::pin_project_lite::__private::PhantomData,
53 pinned2: ::pin_project_lite::__private::PhantomData,
54 unpinned1: ::pin_project_lite::__private::ptr::read(
55 unpinned1,
56 ),
57 unpinned2: ::pin_project_lite::__private::ptr::read(
58 unpinned2,
59 ),
60 };
61 {
62 (
63 ::pin_project_lite::__private::UnsafeDropInPlaceGuard::new(
64 pinned1,
65 ),
66 ::pin_project_lite::__private::UnsafeDropInPlaceGuard::new(
67 pinned2,
68 ),
69 (),
70 (),
71 );
72 }
73 result
74 }
75 Self::Unit => EnumProjReplace::Unit,
76 }
77 }
78 }
79 }
80 #[allow(non_snake_case)]
81 struct __Origin<'__pin, T, U> {
82 __dummy_lifetime: ::pin_project_lite::__private::PhantomData<&'__pin ()>,
83 Struct: (
84 T,
85 T,
86 ::pin_project_lite::__private::AlwaysUnpin<U>,
87 ::pin_project_lite::__private::AlwaysUnpin<U>,
88 ),
89 Unit: (),
90 }
91 impl<'__pin, T, U> ::pin_project_lite::__private::Unpin for Enum<T, U>
92 where
93 ::pin_project_lite::__private::PinnedFieldsOf<
94 __Origin<'__pin, T, U>,
95 >: ::pin_project_lite::__private::Unpin,
96 {}
97 trait MustNotImplDrop {}
98 #[allow(clippy::drop_bounds, drop_bounds)]
99 impl<T: ::pin_project_lite::__private::Drop> MustNotImplDrop for T {}
100 impl<T, U> MustNotImplDrop for Enum<T, U> {}
101 };
main()102 fn main() {}
103