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
17cfg_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)]
55cfg_os_poll! {
56 mod unix;
57 pub use self::unix::*;
58}
59
60#[cfg(windows)]
61cfg_os_poll! {
62 mod windows;
63 pub use self::windows::*;
64}
65
66#[cfg(target_os = "wasi")]
67cfg_os_poll! {
68 mod wasi;
69 pub(crate) use self::wasi::*;
70}
71
72cfg_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