| 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 |  |