• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // SPDX-License-Identifier: Apache-2.0 OR MIT
2 
3 #![allow(dead_code)]
4 
5 #[macro_use]
6 mod auxiliary;
7 
8 pub mod default {
9     use std::marker::PhantomPinned;
10 
11     use pin_project_lite::pin_project;
12 
13     struct Inner<T> {
14         f: T,
15     }
16 
17     assert_unpin!(Inner<()>);
18     assert_not_unpin!(Inner<PhantomPinned>);
19 
20     pin_project! {
21         struct Struct<T, U> {
22             #[pin]
23             f1: Inner<T>,
24             f2: U,
25         }
26     }
27 
28     assert_unpin!(Struct<(), ()>);
29     assert_unpin!(Struct<(), PhantomPinned>);
30     assert_not_unpin!(Struct<PhantomPinned, ()>);
31     assert_not_unpin!(Struct<PhantomPinned, PhantomPinned>);
32 
33     pin_project! {
34         #[project = EnumProj]
35         #[project_ref = EnumProjRef]
36         enum Enum<T, U> {
37             V1 {
38                 #[pin]
39                 f1: Inner<T>,
40                 f2: U,
41             },
42         }
43     }
44 
45     assert_unpin!(Enum<(), ()>);
46     assert_unpin!(Enum<(), PhantomPinned>);
47     assert_not_unpin!(Enum<PhantomPinned, ()>);
48     assert_not_unpin!(Enum<PhantomPinned, PhantomPinned>);
49 
50     pin_project! {
51         #[project(!Unpin)]
52         enum NotUnpinEnum<T, U> {
53             V1 {
54                 #[pin] f1: Inner<T>,
55                 f2: U,
56             }
57         }
58     }
59 
60     assert_not_unpin!(NotUnpinEnum<(), ()>);
61 
62     pin_project! {
63         struct TrivialBounds {
64             #[pin]
65             f: PhantomPinned,
66         }
67     }
68 
69     assert_not_unpin!(TrivialBounds);
70 
71     pin_project! {
72         struct PinRef<'a, T, U> {
73             #[pin]
74             f1: &'a mut Inner<T>,
75             f2: U,
76         }
77     }
78 
79     assert_unpin!(PinRef<'_, PhantomPinned, PhantomPinned>);
80 
81     pin_project! {
82         #[project(!Unpin)]
83         struct NotUnpin<U> {
84             #[pin]
85             u: U
86         }
87     }
88 
89     assert_not_unpin!(NotUnpin<()>);
90 
91     pin_project! {
92         #[project(!Unpin)]
93         struct NotUnpinRef<'a, T, U> {
94             #[pin]
95             f1: &'a mut Inner<T>,
96             f2: U
97         }
98     }
99 
100     assert_not_unpin!(NotUnpinRef<'_, (), ()>);
101 }
102