blob: 8abd9a1c727fcde07dc0dd025fc693379bcf08a0 [file] [log] [blame]
Haibo Huangc1311072021-02-09 17:42:22 -08001use pin_project::pin_project;
2#[pin(__private())]
3pub struct Struct<T, U> {
4 #[pin]
5 pub pinned: T,
6 pub unpinned: U,
7}
8#[allow(box_pointers)]
9#[allow(deprecated)]
10#[allow(explicit_outlives_requirements)]
11#[allow(single_use_lifetimes)]
12#[allow(unreachable_pub)]
13#[allow(clippy::unknown_clippy_lints)]
14#[allow(clippy::pattern_type_mismatch)]
15#[allow(clippy::redundant_pub_crate)]
Joel Galensonc1569cc2021-08-09 10:36:36 -070016#[allow(clippy::type_repetition_in_bounds)]
Elliott Hughesa2c3c562021-04-01 16:34:15 -070017#[allow(clippy::semicolon_if_nothing_returned)]
Joel Galensonc1569cc2021-08-09 10:36:36 -070018#[allow(clippy::use_self)]
Haibo Huangc1311072021-02-09 17:42:22 -080019#[allow(clippy::used_underscore_binding)]
20const _: () = {
Haibo Huangc1311072021-02-09 17:42:22 -080021 #[allow(dead_code)]
22 #[allow(clippy::mut_mut)]
Haibo Huangc1311072021-02-09 17:42:22 -080023 pub(crate) struct __StructProjection<'pin, T, U>
24 where
25 Struct<T, U>: 'pin,
26 {
27 pub pinned: ::pin_project::__private::Pin<&'pin mut (T)>,
28 pub unpinned: &'pin mut (U),
29 }
Haibo Huangc1311072021-02-09 17:42:22 -080030 #[allow(dead_code)]
31 #[allow(clippy::ref_option_ref)]
Haibo Huangc1311072021-02-09 17:42:22 -080032 pub(crate) struct __StructProjectionRef<'pin, T, U>
33 where
34 Struct<T, U>: 'pin,
35 {
36 pub pinned: ::pin_project::__private::Pin<&'pin (T)>,
37 pub unpinned: &'pin (U),
38 }
39 impl<T, U> Struct<T, U> {
40 pub(crate) fn project<'pin>(
41 self: ::pin_project::__private::Pin<&'pin mut Self>,
42 ) -> __StructProjection<'pin, T, U> {
43 unsafe {
44 let Self { pinned, unpinned } = self.get_unchecked_mut();
45 __StructProjection {
46 pinned: ::pin_project::__private::Pin::new_unchecked(pinned),
47 unpinned,
48 }
49 }
50 }
51 #[allow(clippy::missing_const_for_fn)]
52 pub(crate) fn project_ref<'pin>(
53 self: ::pin_project::__private::Pin<&'pin Self>,
54 ) -> __StructProjectionRef<'pin, T, U> {
55 unsafe {
56 let Self { pinned, unpinned } = self.get_ref();
57 __StructProjectionRef {
58 pinned: ::pin_project::__private::Pin::new_unchecked(pinned),
59 unpinned,
60 }
61 }
62 }
63 }
Joel Galensonc95dc512021-05-19 16:12:52 -070064 #[forbid(unaligned_references, safe_packed_borrows)]
Haibo Huangc1311072021-02-09 17:42:22 -080065 fn __assert_not_repr_packed<T, U>(this: &Struct<T, U>) {
66 let _ = &this.pinned;
67 let _ = &this.unpinned;
68 }
69 #[allow(missing_debug_implementations)]
70 pub struct __Struct<'pin, T, U> {
71 __pin_project_use_generics: ::pin_project::__private::AlwaysUnpin<
72 'pin,
73 (
74 ::pin_project::__private::PhantomData<T>,
75 ::pin_project::__private::PhantomData<U>,
76 ),
77 >,
78 __field0: T,
79 }
80 impl<'pin, T, U> ::pin_project::__private::Unpin for Struct<T, U> where
81 __Struct<'pin, T, U>: ::pin_project::__private::Unpin
82 {
83 }
84 #[doc(hidden)]
85 unsafe impl<'pin, T, U> ::pin_project::UnsafeUnpin for Struct<T, U> where
86 __Struct<'pin, T, U>: ::pin_project::__private::Unpin
87 {
88 }
89 trait StructMustNotImplDrop {}
90 #[allow(clippy::drop_bounds, drop_bounds)]
91 impl<T: ::pin_project::__private::Drop> StructMustNotImplDrop for T {}
92 impl<T, U> StructMustNotImplDrop for Struct<T, U> {}
93 #[doc(hidden)]
94 impl<T, U> ::pin_project::__private::PinnedDrop for Struct<T, U> {
95 unsafe fn drop(self: ::pin_project::__private::Pin<&mut Self>) {}
96 }
97};
98fn main() {}