1 macro_rules! os_required {
2     () => {
3         panic!("mio must be compiled with `os-poll` to run.")
4     };
5 }
6 
7 mod selector;
8 pub(crate) use self::selector::{event, Event, Events, Selector};
9 
10 #[cfg(not(target_os = "wasi"))]
11 mod waker;
12 #[cfg(not(target_os = "wasi"))]
13 pub(crate) use self::waker::Waker;
14 
15 cfg_net! {
16     pub(crate) mod tcp;
17     pub(crate) mod udp;
18     #[cfg(unix)]
19     pub(crate) mod uds;
20 }
21 
22 cfg_io_source! {
23     use std::io;
24     #[cfg(any(unix))]
25     use std::os::fd::RawFd;
26     // TODO: once <https://github.com/rust-lang/rust/issues/126198> is fixed this
27     // can use `std::os::fd` and be merged with the above.
28     #[cfg(target_os = "hermit")]
29     use std::os::hermit::io::RawFd;
30     #[cfg(windows)]
31     use std::os::windows::io::RawSocket;
32 
33     #[cfg(any(windows, unix, target_os = "hermit"))]
34     use crate::{Registry, Token, Interest};
35 
36     pub(crate) struct IoSourceState;
37 
38     impl IoSourceState {
39         pub fn new() -> IoSourceState {
40             IoSourceState
41         }
42 
43         pub fn do_io<T, F, R>(&self, f: F, io: &T) -> io::Result<R>
44         where
45             F: FnOnce(&T) -> io::Result<R>,
46         {
47             // We don't hold state, so we can just call the function and
48             // return.
49             f(io)
50         }
51     }
52 
53     #[cfg(any(unix, target_os = "hermit"))]
54     impl IoSourceState {
55         pub fn register(
56             &mut self,
57             _: &Registry,
58             _: Token,
59             _: Interest,
60             _: RawFd,
61         ) -> io::Result<()> {
62             os_required!()
63         }
64 
65         pub fn reregister(
66             &mut self,
67             _: &Registry,
68             _: Token,
69             _: Interest,
70             _: RawFd,
71         ) -> io::Result<()> {
72            os_required!()
73         }
74 
75         pub fn deregister(&mut self, _: &Registry, _: RawFd) -> io::Result<()> {
76             os_required!()
77         }
78     }
79 
80     #[cfg(windows)]
81     impl IoSourceState {
82          pub fn register(
83             &mut self,
84             _: &Registry,
85             _: Token,
86             _: Interest,
87             _: RawSocket,
88         ) -> io::Result<()> {
89             os_required!()
90         }
91 
92         pub fn reregister(
93             &mut self,
94             _: &Registry,
95             _: Token,
96             _: Interest,
97         ) -> io::Result<()> {
98            os_required!()
99         }
100 
101         pub fn deregister(&mut self) -> io::Result<()> {
102             os_required!()
103         }
104     }
105 }
106