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