1 // SPDX-License-Identifier: Apache-2.0 OR MIT
2
3 // Only named projected types can be imported.
4 // See import_unnamed.rs for unnamed projected types.
5
6 #![allow(unused_imports)]
7
8 mod pub_ {
9 use pin_project::pin_project;
10
11 #[pin_project(project = DProj, project_ref = DProjRef)]
12 pub struct Default(());
13
14 #[pin_project(project = RProj, project_ref = RProjRef, project_replace = RProjOwn)]
15 pub struct Replace(());
16 }
17 pub mod pub_use {
18 #[rustfmt::skip]
19 pub use crate::pub_::DProj; //~ ERROR E0365
20 #[rustfmt::skip]
21 pub use crate::pub_::DProjRef; //~ ERROR E0365
22 #[rustfmt::skip]
23 pub use crate::pub_::RProj; //~ ERROR E0365
24 #[rustfmt::skip]
25 pub use crate::pub_::RProjOwn; //~ ERROR E0365
26 #[rustfmt::skip]
27 pub use crate::pub_::RProjRef; //~ ERROR E0365
28
29 // Confirm that the visibility of the original type is not changed.
30 pub use crate::pub_::{Default, Replace};
31 }
32 pub mod pub_use2 {
33 // Ok
34 pub(crate) use crate::pub_::{DProj, DProjRef, RProj, RProjOwn, RProjRef};
35 }
36
37 mod pub_crate {
38 use pin_project::pin_project;
39
40 #[pin_project(project = DProj, project_ref = DProjRef)]
41 pub(crate) struct Default(());
42
43 #[pin_project(project = RProj, project_ref = RProjRef, project_replace = RProjOwn)]
44 pub(crate) struct Replace(());
45 }
46 pub mod pub_crate_use {
47 // Ok
48 pub(crate) use crate::pub_crate::{DProj, DProjRef, RProj, RProjOwn, RProjRef};
49 }
50
main()51 fn main() {}
52