1 //! The public parts of this private module are used to create traits
2 //! that cannot be implemented outside of our own crate.  This way we
3 //! can feel free to extend those traits without worrying about it
4 //! being a breaking change for other implementations.
5 
6 /// If this type is pub but not publicly reachable, third parties
7 /// can't name it and can't implement traits using it.
8 #[allow(missing_debug_implementations)]
9 pub struct PrivateMarker;
10 
11 macro_rules! private_decl {
12     () => {
13         /// This trait is private; this method exists to make it
14         /// impossible to implement outside the crate.
15         #[doc(hidden)]
16         fn __rayon_private__(&self) -> crate::private::PrivateMarker;
17     };
18 }
19 
20 macro_rules! private_impl {
21     () => {
22         fn __rayon_private__(&self) -> crate::private::PrivateMarker {
23             crate::private::PrivateMarker
24         }
25     };
26 }
27