1 use pin_project::{pin_project, UnsafeUnpin};
2 #[pin(__private(UnsafeUnpin))]
3 struct Struct<T, U> {
4 #[pin]
5 pinned: T,
6 unpinned: U,
7 }
8 #[allow(
9 unused_qualifications,
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 clippy::needless_lifetimes,
24 clippy::semicolon_if_nothing_returned,
25 clippy::use_self,
26 clippy::used_underscore_binding
27 )]
28 const _: () = {
29 #[allow(unused_extern_crates)]
30 extern crate pin_project as _pin_project;
31 #[allow(dead_code, clippy::missing_docs_in_private_items, clippy::mut_mut)]
32 struct __StructProjection<'pin, T, U>
33 where
34 Struct<T, U>: 'pin,
35 {
36 pinned: ::pin_project::__private::Pin<&'pin mut (T)>,
37 unpinned: &'pin mut (U),
38 }
39 #[allow(dead_code, clippy::missing_docs_in_private_items, clippy::ref_option_ref)]
40 struct __StructProjectionRef<'pin, T, U>
41 where
42 Struct<T, U>: 'pin,
43 {
44 pinned: ::pin_project::__private::Pin<&'pin (T)>,
45 unpinned: &'pin (U),
46 }
47 impl<T, U> Struct<T, U> {
48 #[allow(dead_code)]
49 #[inline]
project<'pin>( self: _pin_project::__private::Pin<&'pin mut Self>, ) -> __StructProjection<'pin, T, U>50 fn project<'pin>(
51 self: _pin_project::__private::Pin<&'pin mut Self>,
52 ) -> __StructProjection<'pin, T, U> {
53 unsafe {
54 let Self { pinned, unpinned } = self.get_unchecked_mut();
55 __StructProjection {
56 pinned: _pin_project::__private::Pin::new_unchecked(pinned),
57 unpinned,
58 }
59 }
60 }
61 #[allow(dead_code)]
62 #[allow(clippy::missing_const_for_fn)]
63 #[inline]
project_ref<'pin>( self: _pin_project::__private::Pin<&'pin Self>, ) -> __StructProjectionRef<'pin, T, U>64 fn project_ref<'pin>(
65 self: _pin_project::__private::Pin<&'pin Self>,
66 ) -> __StructProjectionRef<'pin, T, U> {
67 unsafe {
68 let Self { pinned, unpinned } = self.get_ref();
69 __StructProjectionRef {
70 pinned: _pin_project::__private::Pin::new_unchecked(pinned),
71 unpinned,
72 }
73 }
74 }
75 }
76 #[forbid(unaligned_references, safe_packed_borrows)]
__assert_not_repr_packed<T, U>(this: &Struct<T, U>)77 fn __assert_not_repr_packed<T, U>(this: &Struct<T, U>) {
78 let _ = &this.pinned;
79 let _ = &this.unpinned;
80 }
81 impl<'pin, T, U> _pin_project::__private::Unpin for Struct<T, U>
82 where
83 _pin_project::__private::PinnedFieldsOf<
84 _pin_project::__private::Wrapper<'pin, Self>,
85 >: _pin_project::UnsafeUnpin,
86 {}
87 trait StructMustNotImplDrop {}
88 #[allow(clippy::drop_bounds, drop_bounds)]
89 impl<T: _pin_project::__private::Drop> StructMustNotImplDrop for T {}
90 impl<T, U> StructMustNotImplDrop for Struct<T, U> {}
91 #[doc(hidden)]
92 impl<T, U> _pin_project::__private::PinnedDrop for Struct<T, U> {
drop(self: _pin_project::__private::Pin<&mut Self>)93 unsafe fn drop(self: _pin_project::__private::Pin<&mut Self>) {}
94 }
95 };
96 unsafe impl<T: Unpin, U> UnsafeUnpin for Struct<T, U> {}
main()97 fn main() {}
98