1 use pin_project::pin_project;
2 #[pin(__private(project_replace))]
3 struct Struct<T, U> {
4 #[pin]
5 pinned1: T,
6 #[pin]
7 pinned2: T,
8 unpinned1: U,
9 unpinned2: U,
10 }
11 #[allow(
12 unused_qualifications,
13 deprecated,
14 explicit_outlives_requirements,
15 single_use_lifetimes,
16 unreachable_pub,
17 unused_tuple_struct_fields,
18 clippy::unknown_clippy_lints,
19 clippy::absolute_paths,
20 clippy::min_ident_chars,
21 clippy::pattern_type_mismatch,
22 clippy::pub_with_shorthand,
23 clippy::redundant_pub_crate,
24 clippy::single_char_lifetime_names,
25 clippy::type_repetition_in_bounds,
26 clippy::needless_lifetimes,
27 clippy::semicolon_if_nothing_returned,
28 clippy::use_self,
29 clippy::used_underscore_binding
30 )]
31 const _: () = {
32 #[allow(unused_extern_crates)]
33 extern crate pin_project as _pin_project;
34 #[allow(dead_code, clippy::missing_docs_in_private_items, clippy::mut_mut)]
35 struct __StructProjection<'pin, T, U>
36 where
37 Struct<T, U>: 'pin,
38 {
39 pinned1: ::pin_project::__private::Pin<&'pin mut (T)>,
40 pinned2: ::pin_project::__private::Pin<&'pin mut (T)>,
41 unpinned1: &'pin mut (U),
42 unpinned2: &'pin mut (U),
43 }
44 #[allow(dead_code, clippy::missing_docs_in_private_items, clippy::ref_option_ref)]
45 struct __StructProjectionRef<'pin, T, U>
46 where
47 Struct<T, U>: 'pin,
48 {
49 pinned1: ::pin_project::__private::Pin<&'pin (T)>,
50 pinned2: ::pin_project::__private::Pin<&'pin (T)>,
51 unpinned1: &'pin (U),
52 unpinned2: &'pin (U),
53 }
54 #[allow(dead_code, clippy::missing_docs_in_private_items)]
55 struct __StructProjectionOwned<T, U> {
56 pinned1: ::pin_project::__private::PhantomData<T>,
57 pinned2: ::pin_project::__private::PhantomData<T>,
58 unpinned1: U,
59 unpinned2: U,
60 }
61 impl<T, U> Struct<T, U> {
62 #[allow(dead_code)]
63 #[inline]
project<'pin>( self: _pin_project::__private::Pin<&'pin mut Self>, ) -> __StructProjection<'pin, T, U>64 fn project<'pin>(
65 self: _pin_project::__private::Pin<&'pin mut Self>,
66 ) -> __StructProjection<'pin, T, U> {
67 unsafe {
68 let Self { pinned1, pinned2, unpinned1, unpinned2 } = self
69 .get_unchecked_mut();
70 __StructProjection {
71 pinned1: _pin_project::__private::Pin::new_unchecked(pinned1),
72 pinned2: _pin_project::__private::Pin::new_unchecked(pinned2),
73 unpinned1,
74 unpinned2,
75 }
76 }
77 }
78 #[allow(dead_code)]
79 #[allow(clippy::missing_const_for_fn)]
80 #[inline]
project_ref<'pin>( self: _pin_project::__private::Pin<&'pin Self>, ) -> __StructProjectionRef<'pin, T, U>81 fn project_ref<'pin>(
82 self: _pin_project::__private::Pin<&'pin Self>,
83 ) -> __StructProjectionRef<'pin, T, U> {
84 unsafe {
85 let Self { pinned1, pinned2, unpinned1, unpinned2 } = self.get_ref();
86 __StructProjectionRef {
87 pinned1: _pin_project::__private::Pin::new_unchecked(pinned1),
88 pinned2: _pin_project::__private::Pin::new_unchecked(pinned2),
89 unpinned1,
90 unpinned2,
91 }
92 }
93 }
94 #[allow(dead_code)]
95 #[inline]
project_replace( self: _pin_project::__private::Pin<&mut Self>, __replacement: Self, ) -> __StructProjectionOwned<T, U>96 fn project_replace(
97 self: _pin_project::__private::Pin<&mut Self>,
98 __replacement: Self,
99 ) -> __StructProjectionOwned<T, U> {
100 unsafe {
101 let __self_ptr: *mut Self = self.get_unchecked_mut();
102 let __guard = _pin_project::__private::UnsafeOverwriteGuard::new(
103 __self_ptr,
104 __replacement,
105 );
106 let Self { pinned1, pinned2, unpinned1, unpinned2 } = &mut *__self_ptr;
107 let __result = __StructProjectionOwned {
108 pinned1: _pin_project::__private::PhantomData,
109 pinned2: _pin_project::__private::PhantomData,
110 unpinned1: _pin_project::__private::ptr::read(unpinned1),
111 unpinned2: _pin_project::__private::ptr::read(unpinned2),
112 };
113 {
114 let __guard = _pin_project::__private::UnsafeDropInPlaceGuard::new(
115 pinned2,
116 );
117 let __guard = _pin_project::__private::UnsafeDropInPlaceGuard::new(
118 pinned1,
119 );
120 }
121 __result
122 }
123 }
124 }
125 #[forbid(unaligned_references, safe_packed_borrows)]
__assert_not_repr_packed<T, U>(this: &Struct<T, U>)126 fn __assert_not_repr_packed<T, U>(this: &Struct<T, U>) {
127 let _ = &this.pinned1;
128 let _ = &this.pinned2;
129 let _ = &this.unpinned1;
130 let _ = &this.unpinned2;
131 }
132 #[allow(missing_debug_implementations, unnameable_types)]
133 struct __Struct<'pin, T, U> {
134 __pin_project_use_generics: _pin_project::__private::AlwaysUnpin<
135 'pin,
136 (
137 _pin_project::__private::PhantomData<T>,
138 _pin_project::__private::PhantomData<U>,
139 ),
140 >,
141 __field0: T,
142 __field1: T,
143 }
144 impl<'pin, T, U> _pin_project::__private::Unpin for Struct<T, U>
145 where
146 _pin_project::__private::PinnedFieldsOf<
147 __Struct<'pin, T, U>,
148 >: _pin_project::__private::Unpin,
149 {}
150 #[doc(hidden)]
151 unsafe impl<'pin, T, U> _pin_project::UnsafeUnpin for Struct<T, U>
152 where
153 _pin_project::__private::PinnedFieldsOf<
154 __Struct<'pin, T, U>,
155 >: _pin_project::__private::Unpin,
156 {}
157 trait StructMustNotImplDrop {}
158 #[allow(clippy::drop_bounds, drop_bounds)]
159 impl<T: _pin_project::__private::Drop> StructMustNotImplDrop for T {}
160 impl<T, U> StructMustNotImplDrop for Struct<T, U> {}
161 #[doc(hidden)]
162 impl<T, U> _pin_project::__private::PinnedDrop for Struct<T, U> {
drop(self: _pin_project::__private::Pin<&mut Self>)163 unsafe fn drop(self: _pin_project::__private::Pin<&mut Self>) {}
164 }
165 };
main()166 fn main() {}
167