1 use std::pin::Pin;
2 use pin_project_lite::pin_project;
3 struct Struct<T, U> {
4 pinned: T,
5 unpinned: U,
6 }
7 #[allow(explicit_outlives_requirements)]
8 #[allow(single_use_lifetimes)]
9 #[allow(clippy::unknown_clippy_lints)]
10 #[allow(clippy::redundant_pub_crate)]
11 #[allow(clippy::used_underscore_binding)]
12 const _: () = {
13 #[doc(hidden)]
14 #[allow(dead_code)]
15 #[allow(single_use_lifetimes)]
16 #[allow(clippy::unknown_clippy_lints)]
17 #[allow(clippy::mut_mut)]
18 #[allow(clippy::redundant_pub_crate)]
19 #[allow(clippy::ref_option_ref)]
20 #[allow(clippy::type_repetition_in_bounds)]
21 struct Projection<'__pin, T, U>
22 where
23 Struct<T, U>: '__pin,
24 {
25 pinned: ::pin_project_lite::__private::Pin<&'__pin mut (T)>,
26 unpinned: &'__pin mut (U),
27 }
28 #[doc(hidden)]
29 #[allow(dead_code)]
30 #[allow(single_use_lifetimes)]
31 #[allow(clippy::unknown_clippy_lints)]
32 #[allow(clippy::mut_mut)]
33 #[allow(clippy::redundant_pub_crate)]
34 #[allow(clippy::ref_option_ref)]
35 #[allow(clippy::type_repetition_in_bounds)]
36 struct ProjectionRef<'__pin, T, U>
37 where
38 Struct<T, U>: '__pin,
39 {
40 pinned: ::pin_project_lite::__private::Pin<&'__pin (T)>,
41 unpinned: &'__pin (U),
42 }
43 impl<T, U> Struct<T, U> {
44 #[doc(hidden)]
45 #[inline]
project<'__pin>( self: ::pin_project_lite::__private::Pin<&'__pin mut Self>, ) -> Projection<'__pin, T, U>46 fn project<'__pin>(
47 self: ::pin_project_lite::__private::Pin<&'__pin mut Self>,
48 ) -> Projection<'__pin, T, U> {
49 unsafe {
50 let Self { pinned, unpinned } = self.get_unchecked_mut();
51 Projection {
52 pinned: ::pin_project_lite::__private::Pin::new_unchecked(pinned),
53 unpinned: unpinned,
54 }
55 }
56 }
57 #[doc(hidden)]
58 #[inline]
project_ref<'__pin>( self: ::pin_project_lite::__private::Pin<&'__pin Self>, ) -> ProjectionRef<'__pin, T, U>59 fn project_ref<'__pin>(
60 self: ::pin_project_lite::__private::Pin<&'__pin Self>,
61 ) -> ProjectionRef<'__pin, T, U> {
62 unsafe {
63 let Self { pinned, unpinned } = self.get_ref();
64 ProjectionRef {
65 pinned: ::pin_project_lite::__private::Pin::new_unchecked(pinned),
66 unpinned: unpinned,
67 }
68 }
69 }
70 }
71 #[allow(non_snake_case)]
72 struct __Origin<'__pin, T, U> {
73 __dummy_lifetime: ::pin_project_lite::__private::PhantomData<&'__pin ()>,
74 pinned: T,
75 unpinned: ::pin_project_lite::__private::AlwaysUnpin<U>,
76 }
77 impl<'__pin, T, U> ::pin_project_lite::__private::Unpin for Struct<T, U>
78 where
79 __Origin<'__pin, T, U>: ::pin_project_lite::__private::Unpin,
80 {}
81 impl<T, U> ::pin_project_lite::__private::Drop for Struct<T, U> {
drop(&mut self)82 fn drop(&mut self) {
83 fn __drop_inner<T, U>(
84 this: ::pin_project_lite::__private::Pin<&mut Struct<T, U>>,
85 ) {
86 fn __drop_inner() {}
87 let _ = this;
88 }
89 let pinned_self: ::pin_project_lite::__private::Pin<&mut Self> = unsafe {
90 ::pin_project_lite::__private::Pin::new_unchecked(self)
91 };
92 __drop_inner(pinned_self);
93 }
94 }
95 #[forbid(unaligned_references, safe_packed_borrows)]
__assert_not_repr_packed<T, U>(this: &Struct<T, U>)96 fn __assert_not_repr_packed<T, U>(this: &Struct<T, U>) {
97 let _ = &this.pinned;
98 let _ = &this.unpinned;
99 }
100 };
main()101 fn main() {}
102