io_extras/os/windows/
traits.rs1use super::types::{BorrowedHandleOrSocket, OwnedHandleOrSocket};
4use super::AsRawHandleOrSocket;
5use io_lifetimes::{AsHandle, AsSocket};
6use std::fs::File;
7use std::io::{Stderr, StderrLock, Stdin, StdinLock, Stdout, StdoutLock};
8use std::net::{TcpListener, TcpStream, UdpSocket};
9use std::process::{ChildStderr, ChildStdin, ChildStdout};
10
11pub trait AsHandleOrSocket {
14 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_>;
17}
18
19impl AsHandleOrSocket for OwnedHandleOrSocket {
20 #[inline]
21 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
22 unsafe { BorrowedHandleOrSocket::borrow_raw(self.as_raw_handle_or_socket()) }
23 }
24}
25
26impl AsHandleOrSocket for BorrowedHandleOrSocket<'_> {
27 #[inline]
28 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
29 *self
30 }
31}
32
33impl AsHandleOrSocket for Stdin {
34 #[inline]
35 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
36 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
37 }
38}
39
40impl AsHandleOrSocket for StdinLock<'_> {
41 #[inline]
42 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
43 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
44 }
45}
46
47impl AsHandleOrSocket for Stdout {
48 #[inline]
49 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
50 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
51 }
52}
53
54impl AsHandleOrSocket for StdoutLock<'_> {
55 #[inline]
56 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
57 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
58 }
59}
60
61impl AsHandleOrSocket for Stderr {
62 #[inline]
63 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
64 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
65 }
66}
67
68impl AsHandleOrSocket for StderrLock<'_> {
69 #[inline]
70 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
71 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
72 }
73}
74
75impl AsHandleOrSocket for File {
76 #[inline]
77 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
78 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
79 }
80}
81
82impl AsHandleOrSocket for ChildStdin {
83 #[inline]
84 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
85 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
86 }
87}
88
89impl AsHandleOrSocket for ChildStdout {
90 #[inline]
91 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
92 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
93 }
94}
95
96impl AsHandleOrSocket for ChildStderr {
97 #[inline]
98 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
99 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
100 }
101}
102
103impl AsHandleOrSocket for TcpStream {
104 #[inline]
105 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
106 BorrowedHandleOrSocket::from_socket(Self::as_socket(self))
107 }
108}
109
110impl AsHandleOrSocket for TcpListener {
111 #[inline]
112 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
113 BorrowedHandleOrSocket::from_socket(Self::as_socket(self))
114 }
115}
116
117impl AsHandleOrSocket for UdpSocket {
118 #[inline]
119 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
120 BorrowedHandleOrSocket::from_socket(Self::as_socket(self))
121 }
122}
123
124#[cfg(feature = "async-std")]
125impl AsHandleOrSocket for async_std::io::Stdin {
126 #[inline]
127 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
128 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
129 }
130}
131
132#[cfg(feature = "async-std")]
133impl AsHandleOrSocket for async_std::io::Stdout {
134 #[inline]
135 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
136 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
137 }
138}
139
140#[cfg(feature = "async-std")]
141impl AsHandleOrSocket for async_std::io::Stderr {
142 #[inline]
143 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
144 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
145 }
146}
147
148#[cfg(feature = "async-std")]
149impl AsHandleOrSocket for async_std::fs::File {
150 #[inline]
151 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
152 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
153 }
154}
155
156#[cfg(feature = "async-std")]
160impl AsHandleOrSocket for async_std::net::TcpStream {
161 #[inline]
162 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
163 BorrowedHandleOrSocket::from_socket(Self::as_socket(self))
164 }
165}
166
167#[cfg(feature = "async-std")]
168impl AsHandleOrSocket for async_std::net::TcpListener {
169 #[inline]
170 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
171 BorrowedHandleOrSocket::from_socket(Self::as_socket(self))
172 }
173}
174
175#[cfg(feature = "async-std")]
176impl AsHandleOrSocket for async_std::net::UdpSocket {
177 #[inline]
178 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
179 BorrowedHandleOrSocket::from_socket(Self::as_socket(self))
180 }
181}
182
183#[cfg(feature = "tokio")]
184impl AsHandleOrSocket for tokio::io::Stdin {
185 #[inline]
186 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
187 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
188 }
189}
190
191#[cfg(feature = "tokio")]
192impl AsHandleOrSocket for tokio::io::Stdout {
193 #[inline]
194 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
195 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
196 }
197}
198
199#[cfg(feature = "tokio")]
200impl AsHandleOrSocket for tokio::io::Stderr {
201 #[inline]
202 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
203 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
204 }
205}
206
207#[cfg(feature = "tokio")]
208impl AsHandleOrSocket for tokio::fs::File {
209 #[inline]
210 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
211 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
212 }
213}
214
215#[cfg(feature = "tokio")]
216impl AsHandleOrSocket for tokio::net::TcpStream {
217 #[inline]
218 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
219 BorrowedHandleOrSocket::from_socket(Self::as_socket(self))
220 }
221}
222
223#[cfg(feature = "tokio")]
224impl AsHandleOrSocket for tokio::net::TcpListener {
225 #[inline]
226 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
227 BorrowedHandleOrSocket::from_socket(Self::as_socket(self))
228 }
229}
230
231#[cfg(feature = "tokio")]
232impl AsHandleOrSocket for tokio::net::UdpSocket {
233 #[inline]
234 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
235 BorrowedHandleOrSocket::from_socket(Self::as_socket(self))
236 }
237}
238
239#[cfg(feature = "tokio")]
240impl AsHandleOrSocket for tokio::process::ChildStdin {
241 #[inline]
242 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
243 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
244 }
245}
246
247#[cfg(feature = "tokio")]
248impl AsHandleOrSocket for tokio::process::ChildStdout {
249 #[inline]
250 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
251 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
252 }
253}
254
255#[cfg(feature = "tokio")]
256impl AsHandleOrSocket for tokio::process::ChildStderr {
257 #[inline]
258 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
259 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
260 }
261}
262
263#[cfg(feature = "os_pipe")]
264impl AsHandleOrSocket for os_pipe::PipeReader {
265 #[inline]
266 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
267 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
268 }
269}
270
271#[cfg(feature = "os_pipe")]
272impl AsHandleOrSocket for os_pipe::PipeWriter {
273 #[inline]
274 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
275 BorrowedHandleOrSocket::from_handle(Self::as_handle(self))
276 }
277}
278
279#[cfg(feature = "socket2")]
280impl AsHandleOrSocket for socket2::Socket {
281 #[inline]
282 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
283 BorrowedHandleOrSocket::from_socket(Self::as_socket(self))
284 }
285}
286
287#[cfg(feature = "use_mio_net")]
288#[cfg(not(io_lifetimes_use_std))] impl AsHandleOrSocket for mio::net::TcpStream {
290 #[inline]
291 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
292 BorrowedHandleOrSocket::from_socket(Self::as_socket(self))
293 }
294}
295
296#[cfg(feature = "use_mio_net")]
297#[cfg(not(io_lifetimes_use_std))] impl AsHandleOrSocket for mio::net::TcpListener {
299 #[inline]
300 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
301 BorrowedHandleOrSocket::from_socket(Self::as_socket(self))
302 }
303}
304
305#[cfg(feature = "use_mio_net")]
306#[cfg(not(io_lifetimes_use_std))] impl AsHandleOrSocket for mio::net::UdpSocket {
308 #[inline]
309 fn as_handle_or_socket(&self) -> BorrowedHandleOrSocket<'_> {
310 BorrowedHandleOrSocket::from_socket(Self::as_socket(self))
311 }
312}
313
314impl From<File> for OwnedHandleOrSocket {
315 #[inline]
316 fn from(file: File) -> OwnedHandleOrSocket {
317 OwnedHandleOrSocket::from_handle(file.into())
318 }
319}
320
321impl From<ChildStdin> for OwnedHandleOrSocket {
322 #[inline]
323 fn from(stdin: ChildStdin) -> OwnedHandleOrSocket {
324 OwnedHandleOrSocket::from_handle(stdin.into())
325 }
326}
327
328impl From<ChildStdout> for OwnedHandleOrSocket {
329 #[inline]
330 fn from(stdout: ChildStdout) -> OwnedHandleOrSocket {
331 OwnedHandleOrSocket::from_handle(stdout.into())
332 }
333}
334
335impl From<ChildStderr> for OwnedHandleOrSocket {
336 #[inline]
337 fn from(stderr: ChildStderr) -> OwnedHandleOrSocket {
338 OwnedHandleOrSocket::from_handle(stderr.into())
339 }
340}
341
342impl From<TcpStream> for OwnedHandleOrSocket {
343 #[inline]
344 fn from(stream: TcpStream) -> OwnedHandleOrSocket {
345 OwnedHandleOrSocket::from_socket(stream.into())
346 }
347}
348
349impl From<TcpListener> for OwnedHandleOrSocket {
350 #[inline]
351 fn from(listener: TcpListener) -> OwnedHandleOrSocket {
352 OwnedHandleOrSocket::from_socket(listener.into())
353 }
354}
355
356impl From<UdpSocket> for OwnedHandleOrSocket {
357 #[inline]
358 fn from(socket: UdpSocket) -> OwnedHandleOrSocket {
359 OwnedHandleOrSocket::from_socket(socket.into())
360 }
361}
362
363#[cfg(feature = "os_pipe")]
364impl From<os_pipe::PipeReader> for OwnedHandleOrSocket {
365 #[inline]
366 fn from(reader: os_pipe::PipeReader) -> OwnedHandleOrSocket {
367 OwnedHandleOrSocket::from_handle(reader.into())
368 }
369}
370
371#[cfg(feature = "os_pipe")]
372impl From<os_pipe::PipeWriter> for OwnedHandleOrSocket {
373 #[inline]
374 fn from(writer: os_pipe::PipeWriter) -> OwnedHandleOrSocket {
375 OwnedHandleOrSocket::from_handle(writer.into())
376 }
377}
378
379#[cfg(feature = "socket2")]
380impl From<socket2::Socket> for OwnedHandleOrSocket {
381 #[inline]
382 fn from(socket: socket2::Socket) -> OwnedHandleOrSocket {
383 OwnedHandleOrSocket::from_socket(socket.into())
384 }
385}
386
387#[cfg(feature = "use_mio_net")]
388#[cfg(not(io_lifetimes_use_std))] impl From<mio::net::TcpStream> for OwnedHandleOrSocket {
390 #[inline]
391 fn from(stream: mio::net::TcpStream) -> OwnedHandleOrSocket {
392 OwnedHandleOrSocket::from_socket(stream.into())
393 }
394}
395
396#[cfg(feature = "use_mio_net")]
397#[cfg(not(io_lifetimes_use_std))] impl From<mio::net::TcpListener> for OwnedHandleOrSocket {
399 #[inline]
400 fn from(listener: mio::net::TcpListener) -> OwnedHandleOrSocket {
401 OwnedHandleOrSocket::from_socket(listener.into())
402 }
403}
404
405#[cfg(feature = "use_mio_net")]
406#[cfg(not(io_lifetimes_use_std))] impl From<mio::net::UdpSocket> for OwnedHandleOrSocket {
408 #[inline]
409 fn from(socket: mio::net::UdpSocket) -> OwnedHandleOrSocket {
410 OwnedHandleOrSocket::from_socket(socket.into())
411 }
412}
413
414#[cfg(feature = "async-std")]
415impl From<async_std::fs::File> for OwnedHandleOrSocket {
416 #[inline]
417 fn from(file: async_std::fs::File) -> OwnedHandleOrSocket {
418 OwnedHandleOrSocket::from_handle(file.into())
419 }
420}
421
422#[cfg(feature = "async-std")]
423impl From<async_std::net::TcpStream> for OwnedHandleOrSocket {
424 #[inline]
425 fn from(stream: async_std::net::TcpStream) -> OwnedHandleOrSocket {
426 OwnedHandleOrSocket::from_socket(stream.into())
427 }
428}
429
430#[cfg(feature = "async-std")]
431impl From<async_std::net::TcpListener> for OwnedHandleOrSocket {
432 #[inline]
433 fn from(listener: async_std::net::TcpListener) -> OwnedHandleOrSocket {
434 OwnedHandleOrSocket::from_socket(listener.into())
435 }
436}
437
438#[cfg(feature = "async-std")]
439impl From<async_std::net::UdpSocket> for OwnedHandleOrSocket {
440 #[inline]
441 fn from(socket: async_std::net::UdpSocket) -> OwnedHandleOrSocket {
442 OwnedHandleOrSocket::from_socket(socket.into())
443 }
444}