1 use pin_project::pin_project;
2 #[pin(__private(project_replace = EnumProjOwn))]
3 enum Enum<T, U> {
4 Struct { #[pin] pinned: T, unpinned: U },
5 Tuple(#[pin] T, U),
6 Unit,
7 }
8 #[allow(
9 dead_code,
10 deprecated,
11 explicit_outlives_requirements,
12 single_use_lifetimes,
13 unreachable_pub,
14 unused_tuple_struct_fields,
15 clippy::unknown_clippy_lints,
16 clippy::absolute_paths,
17 clippy::min_ident_chars,
18 clippy::pattern_type_mismatch,
19 clippy::pub_with_shorthand,
20 clippy::redundant_pub_crate,
21 clippy::single_char_lifetime_names,
22 clippy::type_repetition_in_bounds,
23 variant_size_differences,
24 clippy::large_enum_variant,
25 clippy::missing_docs_in_private_items
26 )]
27 enum EnumProjOwn<T, U> {
28 Struct { pinned: ::pin_project::__private::PhantomData<T>, unpinned: U },
29 Tuple(::pin_project::__private::PhantomData<T>, U),
30 Unit,
31 }
32 #[allow(
33 unused_qualifications,
34 deprecated,
35 explicit_outlives_requirements,
36 single_use_lifetimes,
37 unreachable_pub,
38 unused_tuple_struct_fields,
39 clippy::unknown_clippy_lints,
40 clippy::absolute_paths,
41 clippy::min_ident_chars,
42 clippy::pattern_type_mismatch,
43 clippy::pub_with_shorthand,
44 clippy::redundant_pub_crate,
45 clippy::single_char_lifetime_names,
46 clippy::type_repetition_in_bounds,
47 clippy::needless_lifetimes,
48 clippy::semicolon_if_nothing_returned,
49 clippy::use_self,
50 clippy::used_underscore_binding
51 )]
52 const _: () = {
53 #[allow(unused_extern_crates)]
54 extern crate pin_project as _pin_project;
55 impl<T, U> Enum<T, U> {
56 #[allow(dead_code)]
57 #[inline]
project_replace( self: _pin_project::__private::Pin<&mut Self>, __replacement: Self, ) -> EnumProjOwn<T, U>58 fn project_replace(
59 self: _pin_project::__private::Pin<&mut Self>,
60 __replacement: Self,
61 ) -> EnumProjOwn<T, U> {
62 unsafe {
63 let __self_ptr: *mut Self = self.get_unchecked_mut();
64 let __guard = _pin_project::__private::UnsafeOverwriteGuard::new(
65 __self_ptr,
66 __replacement,
67 );
68 match &mut *__self_ptr {
69 Self::Struct { pinned, unpinned } => {
70 let __result = EnumProjOwn::Struct {
71 pinned: _pin_project::__private::PhantomData,
72 unpinned: _pin_project::__private::ptr::read(unpinned),
73 };
74 {
75 let __guard = _pin_project::__private::UnsafeDropInPlaceGuard::new(
76 pinned,
77 );
78 }
79 __result
80 }
81 Self::Tuple(_0, _1) => {
82 let __result = EnumProjOwn::Tuple(
83 _pin_project::__private::PhantomData,
84 _pin_project::__private::ptr::read(_1),
85 );
86 {
87 let __guard = _pin_project::__private::UnsafeDropInPlaceGuard::new(
88 _0,
89 );
90 }
91 __result
92 }
93 Self::Unit => {
94 let __result = EnumProjOwn::Unit;
95 {}
96 __result
97 }
98 }
99 }
100 }
101 }
102 #[allow(missing_debug_implementations, unnameable_types)]
103 struct __Enum<'pin, T, U> {
104 __pin_project_use_generics: _pin_project::__private::AlwaysUnpin<
105 'pin,
106 (
107 _pin_project::__private::PhantomData<T>,
108 _pin_project::__private::PhantomData<U>,
109 ),
110 >,
111 __field0: T,
112 __field1: T,
113 }
114 impl<'pin, T, U> _pin_project::__private::Unpin for Enum<T, U>
115 where
116 _pin_project::__private::PinnedFieldsOf<
117 __Enum<'pin, T, U>,
118 >: _pin_project::__private::Unpin,
119 {}
120 #[doc(hidden)]
121 unsafe impl<'pin, T, U> _pin_project::UnsafeUnpin for Enum<T, U>
122 where
123 _pin_project::__private::PinnedFieldsOf<
124 __Enum<'pin, T, U>,
125 >: _pin_project::__private::Unpin,
126 {}
127 trait EnumMustNotImplDrop {}
128 #[allow(clippy::drop_bounds, drop_bounds)]
129 impl<T: _pin_project::__private::Drop> EnumMustNotImplDrop for T {}
130 impl<T, U> EnumMustNotImplDrop for Enum<T, U> {}
131 #[doc(hidden)]
132 impl<T, U> _pin_project::__private::PinnedDrop for Enum<T, U> {
drop(self: _pin_project::__private::Pin<&mut Self>)133 unsafe fn drop(self: _pin_project::__private::Pin<&mut Self>) {}
134 }
135 };
main()136 fn main() {}
137