1 use pin_project_lite::pin_project;
2 struct Struct<T, U> {
3 pinned: T,
4 unpinned: U,
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 struct StructProj<'__pin, T, U>
20 where
21 Struct<T, U>: '__pin,
22 {
23 pinned: ::pin_project_lite::__private::Pin<&'__pin mut (T)>,
24 unpinned: &'__pin mut (U),
25 }
26 #[doc(hidden)]
27 #[allow(
28 dead_code,
29 single_use_lifetimes,
30 clippy::unknown_clippy_lints,
31 clippy::absolute_paths,
32 clippy::min_ident_chars,
33 clippy::mut_mut,
34 clippy::redundant_pub_crate,
35 clippy::ref_option_ref,
36 clippy::single_char_lifetime_names,
37 clippy::type_repetition_in_bounds
38 )]
39 struct StructProjRef<'__pin, T, U>
40 where
41 Struct<T, U>: '__pin,
42 {
43 pinned: ::pin_project_lite::__private::Pin<&'__pin (T)>,
44 unpinned: &'__pin (U),
45 }
46 #[doc(hidden)]
47 #[allow(
48 dead_code,
49 single_use_lifetimes,
50 clippy::unknown_clippy_lints,
51 clippy::absolute_paths,
52 clippy::min_ident_chars,
53 clippy::mut_mut,
54 clippy::redundant_pub_crate,
55 clippy::single_char_lifetime_names,
56 clippy::type_repetition_in_bounds
57 )]
58 struct StructProjReplace<T, U> {
59 pinned: ::pin_project_lite::__private::PhantomData<T>,
60 unpinned: U,
61 }
62 #[allow(
63 explicit_outlives_requirements,
64 single_use_lifetimes,
65 clippy::unknown_clippy_lints,
66 clippy::absolute_paths,
67 clippy::min_ident_chars,
68 clippy::redundant_pub_crate,
69 clippy::single_char_lifetime_names,
70 clippy::used_underscore_binding
71 )]
72 const _: () = {
73 impl<T, U> Struct<T, U> {
74 #[doc(hidden)]
75 #[inline]
project<'__pin>( self: ::pin_project_lite::__private::Pin<&'__pin mut Self>, ) -> StructProj<'__pin, T, U>76 fn project<'__pin>(
77 self: ::pin_project_lite::__private::Pin<&'__pin mut Self>,
78 ) -> StructProj<'__pin, T, U> {
79 unsafe {
80 let Self { pinned, unpinned } = self.get_unchecked_mut();
81 StructProj {
82 pinned: ::pin_project_lite::__private::Pin::new_unchecked(pinned),
83 unpinned: unpinned,
84 }
85 }
86 }
87 #[doc(hidden)]
88 #[inline]
project_ref<'__pin>( self: ::pin_project_lite::__private::Pin<&'__pin Self>, ) -> StructProjRef<'__pin, T, U>89 fn project_ref<'__pin>(
90 self: ::pin_project_lite::__private::Pin<&'__pin Self>,
91 ) -> StructProjRef<'__pin, T, U> {
92 unsafe {
93 let Self { pinned, unpinned } = self.get_ref();
94 StructProjRef {
95 pinned: ::pin_project_lite::__private::Pin::new_unchecked(pinned),
96 unpinned: unpinned,
97 }
98 }
99 }
100 #[doc(hidden)]
101 #[inline]
project_replace( self: ::pin_project_lite::__private::Pin<&mut Self>, replacement: Self, ) -> StructProjReplace<T, U>102 fn project_replace(
103 self: ::pin_project_lite::__private::Pin<&mut Self>,
104 replacement: Self,
105 ) -> StructProjReplace<T, U> {
106 unsafe {
107 let __self_ptr: *mut Self = self.get_unchecked_mut();
108 let __guard = ::pin_project_lite::__private::UnsafeOverwriteGuard::new(
109 __self_ptr,
110 replacement,
111 );
112 let Self { pinned, unpinned } = &mut *__self_ptr;
113 let result = StructProjReplace {
114 pinned: ::pin_project_lite::__private::PhantomData,
115 unpinned: ::pin_project_lite::__private::ptr::read(unpinned),
116 };
117 {
118 (
119 ::pin_project_lite::__private::UnsafeDropInPlaceGuard::new(
120 pinned,
121 ),
122 (),
123 );
124 }
125 result
126 }
127 }
128 }
129 #[allow(non_snake_case)]
130 struct __Origin<'__pin, T, U> {
131 __dummy_lifetime: ::pin_project_lite::__private::PhantomData<&'__pin ()>,
132 pinned: T,
133 unpinned: ::pin_project_lite::__private::AlwaysUnpin<U>,
134 }
135 impl<'__pin, T, U> ::pin_project_lite::__private::Unpin for Struct<T, U>
136 where
137 ::pin_project_lite::__private::PinnedFieldsOf<
138 __Origin<'__pin, T, U>,
139 >: ::pin_project_lite::__private::Unpin,
140 {}
141 trait MustNotImplDrop {}
142 #[allow(clippy::drop_bounds, drop_bounds)]
143 impl<T: ::pin_project_lite::__private::Drop> MustNotImplDrop for T {}
144 impl<T, U> MustNotImplDrop for Struct<T, U> {}
145 #[forbid(unaligned_references, safe_packed_borrows)]
__assert_not_repr_packed<T, U>(this: &Struct<T, U>)146 fn __assert_not_repr_packed<T, U>(this: &Struct<T, U>) {
147 let _ = &this.pinned;
148 let _ = &this.unpinned;
149 }
150 };
main()151 fn main() {}
152