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