1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
mod sealed {
    use super::*;

    pub
    trait RepresentsAutoTraits {}

    impl RepresentsAutoTraits for dyn Send + 'static {}
    impl RepresentsAutoTraits for dyn Sync + 'static {}
    impl RepresentsAutoTraits for dyn Send + Sync + 'static {}
    impl RepresentsAutoTraits for NoAutoTraits {}
}

pub
struct NoAutoTraits (
    PhantomNotSendNorSync,
    ::core::convert::Infallible,
);

type PhantomNotSendNorSync =
    ::core::marker::PhantomData<*mut ()>
;

// struct PhantomNotSend(PhantomNotSendNorSync);
// unsafe // Safety: no API whatsoever.
//     impl Sync for PhantomNotSend {}

// type PhantomNotSync =
//     ::core::marker::PhantomData<&'static ::core::cell::Cell<u8>>
// ;

/// This is a "fake type-level `enum`" to hint at the generated documentation
/// what the purpose of some type params is.
///
/// ```rust
/// # macro_rules! ignore {($($t:tt)*) => ()} ignore! {
/// #[type_level_enum]
/// pub enum Sendness {
///     /// `+ ?Send` (default)
///     MaybeNotSend,
///     /// `+ Send
///     dyn Send,
/// }
/// # } fn main () {}
/// ```
#[doc(hidden)] #[allow(nonstandard_style)]
pub
mod Sendness {
    use super::*;

    pub
    trait T : sealed::RepresentsAutoTraits {}

    impl T for dyn Send {}
    impl T for dyn Sync {}
    impl T for dyn Send + Sync {}
    impl T for NoAutoTraits {}
}

/// This is a "fake type-level `enum`" to hint at the generated documentation
/// what the purpose of some type params is.
///
/// ```rust
/// # macro_rules! ignore {($($t:tt)*) => ()} ignore! {
/// #[type_level_enum]
/// pub enum Syncness {
///     /// `+ ?Sync` (default)
///     MaybeNotSync,
///     /// `+ Sync
///     dyn Sync,
/// }
/// # } fn main () {}
/// ```
#[doc(hidden)] #[allow(nonstandard_style)]
pub
mod Syncness {
    use super::*;

    pub
    trait T : sealed::RepresentsAutoTraits {}

    impl T for dyn Send {}
    impl T for dyn Sync {}
    impl T for dyn Send + Sync {}
    impl T for NoAutoTraits {}
}