1//! Implementations of io-lifetimes' traits for mio's types. In the
2//! future, we'll prefer to have crates provide their own impls; this is
3//! just a temporary measure.
4
5#[cfg(any(unix, target_os = "wasi"))]
6use crate::{AsFd, BorrowedFd, FromFd, IntoFd, OwnedFd};
7#[cfg(windows)]
8use crate::{AsSocket, BorrowedSocket, FromSocket, IntoSocket, OwnedSocket};
9#[cfg(unix)]
10use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd};
11#[cfg(target_os = "wasi")]
12use std::os::wasi::io::{AsRawFd, FromRawFd, IntoRawFd};
13#[cfg(windows)]
14use std::os::windows::io::{AsRawSocket, FromRawSocket, IntoRawSocket};
15
16#[cfg(any(unix, target_os = "wasi"))]
17impl AsFd for mio::net::TcpStream {
18    #[inline]
19    fn as_fd(&self) -> BorrowedFd<'_> {
20        unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
21    }
22}
23
24#[cfg(windows)]
25impl AsSocket for mio::net::TcpStream {
26    #[inline]
27    fn as_socket(&self) -> BorrowedSocket<'_> {
28        unsafe { BorrowedSocket::borrow_raw(self.as_raw_socket()) }
29    }
30}
31
32#[cfg(any(unix, target_os = "wasi"))]
33impl IntoFd for mio::net::TcpStream {
34    #[inline]
35    fn into_fd(self) -> OwnedFd {
36        unsafe { OwnedFd::from_raw_fd(self.into_raw_fd()) }
37    }
38}
39
40#[cfg(any(unix, target_os = "wasi"))]
41impl From<mio::net::TcpStream> for OwnedFd {
42    #[inline]
43    fn from(owned: mio::net::TcpStream) -> Self {
44        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
45    }
46}
47
48#[cfg(windows)]
49impl IntoSocket for mio::net::TcpStream {
50    #[inline]
51    fn into_socket(self) -> OwnedSocket {
52        unsafe { OwnedSocket::from_raw_socket(self.into_raw_socket()) }
53    }
54}
55
56#[cfg(windows)]
57impl From<mio::net::TcpStream> for OwnedSocket {
58    #[inline]
59    fn from(owned: mio::net::TcpStream) -> Self {
60        unsafe { Self::from_raw_socket(owned.into_raw_socket()) }
61    }
62}
63
64#[cfg(any(unix, target_os = "wasi"))]
65impl FromFd for mio::net::TcpStream {
66    #[inline]
67    fn from_fd(owned: OwnedFd) -> Self {
68        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
69    }
70}
71
72#[cfg(any(unix, target_os = "wasi"))]
73impl From<OwnedFd> for mio::net::TcpStream {
74    #[inline]
75    fn from(owned: OwnedFd) -> Self {
76        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
77    }
78}
79
80#[cfg(windows)]
81impl FromSocket for mio::net::TcpStream {
82    #[inline]
83    fn from_socket(owned: OwnedSocket) -> Self {
84        unsafe { Self::from_raw_socket(owned.into_raw_socket()) }
85    }
86}
87
88#[cfg(windows)]
89impl From<OwnedSocket> for mio::net::TcpStream {
90    #[inline]
91    fn from(owned: OwnedSocket) -> Self {
92        unsafe { Self::from_raw_socket(owned.into_raw_socket()) }
93    }
94}
95
96#[cfg(any(unix, target_os = "wasi"))]
97impl AsFd for mio::net::TcpListener {
98    #[inline]
99    fn as_fd(&self) -> BorrowedFd<'_> {
100        unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
101    }
102}
103
104#[cfg(windows)]
105impl AsSocket for mio::net::TcpListener {
106    #[inline]
107    fn as_socket(&self) -> BorrowedSocket<'_> {
108        unsafe { BorrowedSocket::borrow_raw(self.as_raw_socket()) }
109    }
110}
111
112#[cfg(any(unix, target_os = "wasi"))]
113impl IntoFd for mio::net::TcpListener {
114    #[inline]
115    fn into_fd(self) -> OwnedFd {
116        unsafe { OwnedFd::from_raw_fd(self.into_raw_fd()) }
117    }
118}
119
120#[cfg(any(unix, target_os = "wasi"))]
121impl From<mio::net::TcpListener> for OwnedFd {
122    #[inline]
123    fn from(owned: mio::net::TcpListener) -> Self {
124        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
125    }
126}
127
128#[cfg(windows)]
129impl IntoSocket for mio::net::TcpListener {
130    #[inline]
131    fn into_socket(self) -> OwnedSocket {
132        unsafe { OwnedSocket::from_raw_socket(self.into_raw_socket()) }
133    }
134}
135
136#[cfg(windows)]
137impl From<mio::net::TcpListener> for OwnedSocket {
138    #[inline]
139    fn from(owned: mio::net::TcpListener) -> Self {
140        unsafe { Self::from_raw_socket(owned.into_raw_socket()) }
141    }
142}
143
144#[cfg(any(unix, target_os = "wasi"))]
145impl FromFd for mio::net::TcpListener {
146    #[inline]
147    fn from_fd(owned: OwnedFd) -> Self {
148        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
149    }
150}
151
152#[cfg(any(unix, target_os = "wasi"))]
153impl From<OwnedFd> for mio::net::TcpListener {
154    #[inline]
155    fn from(owned: OwnedFd) -> Self {
156        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
157    }
158}
159
160#[cfg(windows)]
161impl FromSocket for mio::net::TcpListener {
162    #[inline]
163    fn from_socket(owned: OwnedSocket) -> Self {
164        unsafe { Self::from_raw_socket(owned.into_raw_socket()) }
165    }
166}
167
168#[cfg(windows)]
169impl From<OwnedSocket> for mio::net::TcpListener {
170    #[inline]
171    fn from(owned: OwnedSocket) -> Self {
172        unsafe { Self::from_raw_socket(owned.into_raw_socket()) }
173    }
174}
175
176#[cfg(any(unix, target_os = "wasi"))]
177impl AsFd for mio::net::UdpSocket {
178    #[inline]
179    fn as_fd(&self) -> BorrowedFd<'_> {
180        unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
181    }
182}
183
184#[cfg(windows)]
185impl AsSocket for mio::net::UdpSocket {
186    #[inline]
187    fn as_socket(&self) -> BorrowedSocket<'_> {
188        unsafe { BorrowedSocket::borrow_raw(self.as_raw_socket()) }
189    }
190}
191
192#[cfg(any(unix, target_os = "wasi"))]
193impl IntoFd for mio::net::UdpSocket {
194    #[inline]
195    fn into_fd(self) -> OwnedFd {
196        unsafe { OwnedFd::from_raw_fd(self.into_raw_fd()) }
197    }
198}
199
200#[cfg(any(unix, target_os = "wasi"))]
201impl From<mio::net::UdpSocket> for OwnedFd {
202    #[inline]
203    fn from(owned: mio::net::UdpSocket) -> Self {
204        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
205    }
206}
207
208#[cfg(windows)]
209impl IntoSocket for mio::net::UdpSocket {
210    #[inline]
211    fn into_socket(self) -> OwnedSocket {
212        unsafe { OwnedSocket::from_raw_socket(self.into_raw_socket()) }
213    }
214}
215
216#[cfg(windows)]
217impl From<mio::net::UdpSocket> for OwnedSocket {
218    #[inline]
219    fn from(owned: mio::net::UdpSocket) -> Self {
220        unsafe { Self::from_raw_socket(owned.into_raw_socket()) }
221    }
222}
223
224#[cfg(any(unix, target_os = "wasi"))]
225impl FromFd for mio::net::UdpSocket {
226    #[inline]
227    fn from_fd(owned: OwnedFd) -> Self {
228        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
229    }
230}
231
232#[cfg(any(unix, target_os = "wasi"))]
233impl From<OwnedFd> for mio::net::UdpSocket {
234    #[inline]
235    fn from(owned: OwnedFd) -> Self {
236        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
237    }
238}
239
240#[cfg(windows)]
241impl FromSocket for mio::net::UdpSocket {
242    #[inline]
243    fn from_socket(owned: OwnedSocket) -> Self {
244        unsafe { Self::from_raw_socket(owned.into_raw_socket()) }
245    }
246}
247
248#[cfg(windows)]
249impl From<OwnedSocket> for mio::net::UdpSocket {
250    #[inline]
251    fn from(owned: OwnedSocket) -> Self {
252        unsafe { Self::from_raw_socket(owned.into_raw_socket()) }
253    }
254}
255
256#[cfg(unix)]
257impl AsFd for mio::net::UnixDatagram {
258    #[inline]
259    fn as_fd(&self) -> BorrowedFd<'_> {
260        unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
261    }
262}
263
264#[cfg(unix)]
265impl IntoFd for mio::net::UnixDatagram {
266    #[inline]
267    fn into_fd(self) -> OwnedFd {
268        unsafe { OwnedFd::from_raw_fd(self.into_raw_fd()) }
269    }
270}
271
272#[cfg(unix)]
273impl From<mio::net::UnixDatagram> for OwnedFd {
274    #[inline]
275    fn from(owned: mio::net::UnixDatagram) -> Self {
276        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
277    }
278}
279
280#[cfg(unix)]
281impl FromFd for mio::net::UnixDatagram {
282    #[inline]
283    fn from_fd(owned: OwnedFd) -> Self {
284        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
285    }
286}
287
288#[cfg(unix)]
289impl From<OwnedFd> for mio::net::UnixDatagram {
290    #[inline]
291    fn from(owned: OwnedFd) -> Self {
292        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
293    }
294}
295
296#[cfg(unix)]
297impl AsFd for mio::net::UnixListener {
298    #[inline]
299    fn as_fd(&self) -> BorrowedFd<'_> {
300        unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
301    }
302}
303
304#[cfg(unix)]
305impl IntoFd for mio::net::UnixListener {
306    #[inline]
307    fn into_fd(self) -> OwnedFd {
308        unsafe { OwnedFd::from_raw_fd(self.into_raw_fd()) }
309    }
310}
311
312#[cfg(unix)]
313impl From<mio::net::UnixListener> for OwnedFd {
314    #[inline]
315    fn from(owned: mio::net::UnixListener) -> Self {
316        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
317    }
318}
319
320#[cfg(unix)]
321impl FromFd for mio::net::UnixListener {
322    #[inline]
323    fn from_fd(owned: OwnedFd) -> Self {
324        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
325    }
326}
327
328#[cfg(unix)]
329impl From<OwnedFd> for mio::net::UnixListener {
330    #[inline]
331    fn from(owned: OwnedFd) -> Self {
332        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
333    }
334}
335
336#[cfg(unix)]
337impl AsFd for mio::net::UnixStream {
338    #[inline]
339    fn as_fd(&self) -> BorrowedFd<'_> {
340        unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
341    }
342}
343
344#[cfg(unix)]
345impl IntoFd for mio::net::UnixStream {
346    #[inline]
347    fn into_fd(self) -> OwnedFd {
348        unsafe { OwnedFd::from_raw_fd(self.into_raw_fd()) }
349    }
350}
351
352#[cfg(unix)]
353impl From<mio::net::UnixStream> for OwnedFd {
354    #[inline]
355    fn from(owned: mio::net::UnixStream) -> Self {
356        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
357    }
358}
359
360#[cfg(unix)]
361impl FromFd for mio::net::UnixStream {
362    #[inline]
363    fn from_fd(owned: OwnedFd) -> Self {
364        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
365    }
366}
367
368#[cfg(unix)]
369impl From<OwnedFd> for mio::net::UnixStream {
370    #[inline]
371    fn from(owned: OwnedFd) -> Self {
372        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
373    }
374}
375
376#[cfg(unix)]
377impl AsFd for mio::unix::pipe::Receiver {
378    #[inline]
379    fn as_fd(&self) -> BorrowedFd<'_> {
380        unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
381    }
382}
383
384#[cfg(unix)]
385impl IntoFd for mio::unix::pipe::Receiver {
386    #[inline]
387    fn into_fd(self) -> OwnedFd {
388        unsafe { OwnedFd::from_raw_fd(self.into_raw_fd()) }
389    }
390}
391
392#[cfg(unix)]
393impl From<mio::unix::pipe::Receiver> for OwnedFd {
394    #[inline]
395    fn from(owned: mio::unix::pipe::Receiver) -> Self {
396        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
397    }
398}
399
400#[cfg(unix)]
401impl FromFd for mio::unix::pipe::Receiver {
402    #[inline]
403    fn from_fd(owned: OwnedFd) -> Self {
404        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
405    }
406}
407
408#[cfg(unix)]
409impl From<OwnedFd> for mio::unix::pipe::Receiver {
410    #[inline]
411    fn from(owned: OwnedFd) -> Self {
412        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
413    }
414}
415
416#[cfg(unix)]
417impl AsFd for mio::unix::pipe::Sender {
418    #[inline]
419    fn as_fd(&self) -> BorrowedFd<'_> {
420        unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
421    }
422}
423
424#[cfg(unix)]
425impl IntoFd for mio::unix::pipe::Sender {
426    #[inline]
427    fn into_fd(self) -> OwnedFd {
428        unsafe { OwnedFd::from_raw_fd(self.into_raw_fd()) }
429    }
430}
431
432#[cfg(unix)]
433impl From<mio::unix::pipe::Sender> for OwnedFd {
434    #[inline]
435    fn from(owned: mio::unix::pipe::Sender) -> Self {
436        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
437    }
438}
439
440#[cfg(unix)]
441impl FromFd for mio::unix::pipe::Sender {
442    #[inline]
443    fn from_fd(owned: OwnedFd) -> Self {
444        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
445    }
446}
447
448#[cfg(unix)]
449impl From<OwnedFd> for mio::unix::pipe::Sender {
450    #[inline]
451    fn from(owned: OwnedFd) -> Self {
452        unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
453    }
454}
455