• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //! Module with system specific types.
2 //!
3 //! Required types:
4 //!
5 //! * `Event`: a type alias for the system specific event, e.g. `kevent` or
6 //!            `epoll_event`.
7 //! * `event`: a module with various helper functions for `Event`, see
8 //!            [`crate::event::Event`] for the required functions.
9 //! * `Events`: collection of `Event`s, see [`crate::Events`].
10 //! * `IoSourceState`: state for the `IoSource` type.
11 //! * `Selector`: selector used to register event sources and poll for events,
12 //!               see [`crate::Poll`] and [`crate::Registry`] for required
13 //!               methods.
14 //! * `tcp` and `udp` modules: see the [`crate::net`] module.
15 //! * `Waker`: see [`crate::Waker`].
16 
17 cfg_os_poll! {
18     macro_rules! debug_detail {
19         (
20             $type: ident ($event_type: ty), $test: path,
21             $($(#[$target: meta])* $libc: ident :: $flag: ident),+ $(,)*
22         ) => {
23             struct $type($event_type);
24 
25             impl fmt::Debug for $type {
26                 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
27                     let mut written_one = false;
28                     $(
29                         $(#[$target])*
30                         #[allow(clippy::bad_bit_mask)] // Apparently some flags are zero.
31                         {
32                             // Windows doesn't use `libc` but the `afd` module.
33                             if $test(&self.0, &$libc :: $flag) {
34                                 if !written_one {
35                                     write!(f, "{}", stringify!($flag))?;
36                                     written_one = true;
37                                 } else {
38                                     write!(f, "|{}", stringify!($flag))?;
39                                 }
40                             }
41                         }
42                     )+
43                     if !written_one {
44                         write!(f, "(empty)")
45                     } else {
46                         Ok(())
47                     }
48                 }
49             }
50         };
51     }
52 }
53 
54 #[cfg(unix)]
55 cfg_os_poll! {
56     mod unix;
57     pub use self::unix::*;
58 }
59 
60 #[cfg(windows)]
61 cfg_os_poll! {
62     mod windows;
63     pub use self::windows::*;
64 }
65 
66 #[cfg(target_os = "wasi")]
67 cfg_os_poll! {
68     mod wasi;
69     pub(crate) use self::wasi::*;
70 }
71 
72 cfg_not_os_poll! {
73     mod shell;
74     pub(crate) use self::shell::*;
75 
76     #[cfg(unix)]
77     cfg_any_os_ext! {
78         mod unix;
79         pub use self::unix::SourceFd;
80     }
81 
82     #[cfg(unix)]
83     cfg_net! {
84         pub use self::unix::SocketAddr;
85     }
86 }
87