• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //! Implementations of io-lifetimes' traits for tokio'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"))]
6 use crate::{AsFd, BorrowedFd, FromFd, OwnedFd};
7 #[cfg(windows)]
8 use crate::{AsHandle, AsSocket, BorrowedHandle, BorrowedSocket, FromHandle, OwnedHandle};
9 #[cfg(unix)]
10 use std::os::unix::io::{AsRawFd, FromRawFd, IntoRawFd};
11 #[cfg(target_os = "wasi")]
12 use std::os::wasi::io::{AsRawFd, FromRawFd, IntoRawFd};
13 #[cfg(windows)]
14 use std::os::windows::io::{AsRawHandle, AsRawSocket, FromRawHandle, IntoRawHandle};
15 
16 #[cfg(any(unix, target_os = "wasi"))]
17 impl AsFd for tokio::fs::File {
18     #[inline]
as_fd(&self) -> BorrowedFd<'_>19     fn as_fd(&self) -> BorrowedFd<'_> {
20         unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
21     }
22 }
23 
24 #[cfg(windows)]
25 impl AsHandle for tokio::fs::File {
26     #[inline]
as_handle(&self) -> BorrowedHandle<'_>27     fn as_handle(&self) -> BorrowedHandle<'_> {
28         unsafe { BorrowedHandle::borrow_raw(self.as_raw_handle()) }
29     }
30 }
31 
32 #[cfg(any(unix, target_os = "wasi"))]
33 impl FromFd for tokio::fs::File {
34     #[inline]
from_fd(owned: OwnedFd) -> Self35     fn from_fd(owned: OwnedFd) -> Self {
36         unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
37     }
38 }
39 
40 #[cfg(any(unix, target_os = "wasi"))]
41 impl From<OwnedFd> for tokio::fs::File {
42     #[inline]
from(owned: OwnedFd) -> Self43     fn from(owned: OwnedFd) -> Self {
44         unsafe { Self::from_raw_fd(owned.into_raw_fd()) }
45     }
46 }
47 
48 #[cfg(windows)]
49 impl FromHandle for tokio::fs::File {
50     #[inline]
from_handle(owned: OwnedHandle) -> Self51     fn from_handle(owned: OwnedHandle) -> Self {
52         unsafe { Self::from_raw_handle(owned.into_raw_handle()) }
53     }
54 }
55 
56 #[cfg(windows)]
57 impl From<OwnedHandle> for tokio::fs::File {
58     #[inline]
from(owned: OwnedHandle) -> Self59     fn from(owned: OwnedHandle) -> Self {
60         unsafe { Self::from_raw_handle(owned.into_raw_handle()) }
61     }
62 }
63 
64 #[cfg(any(unix, target_os = "wasi"))]
65 impl AsFd for tokio::net::TcpStream {
66     #[inline]
as_fd(&self) -> BorrowedFd<'_>67     fn as_fd(&self) -> BorrowedFd<'_> {
68         unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
69     }
70 }
71 
72 #[cfg(windows)]
73 impl AsSocket for tokio::net::TcpStream {
74     #[inline]
as_socket(&self) -> BorrowedSocket<'_>75     fn as_socket(&self) -> BorrowedSocket<'_> {
76         unsafe { BorrowedSocket::borrow_raw(self.as_raw_socket()) }
77     }
78 }
79 
80 #[cfg(any(unix, target_os = "wasi"))]
81 impl AsFd for tokio::net::TcpListener {
82     #[inline]
as_fd(&self) -> BorrowedFd<'_>83     fn as_fd(&self) -> BorrowedFd<'_> {
84         unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
85     }
86 }
87 
88 #[cfg(windows)]
89 impl AsSocket for tokio::net::TcpListener {
90     #[inline]
as_socket(&self) -> BorrowedSocket<'_>91     fn as_socket(&self) -> BorrowedSocket<'_> {
92         unsafe { BorrowedSocket::borrow_raw(self.as_raw_socket()) }
93     }
94 }
95 
96 #[cfg(any(unix, target_os = "wasi"))]
97 impl AsFd for tokio::net::UdpSocket {
98     #[inline]
as_fd(&self) -> BorrowedFd<'_>99     fn as_fd(&self) -> BorrowedFd<'_> {
100         unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
101     }
102 }
103 
104 #[cfg(windows)]
105 impl AsSocket for tokio::net::UdpSocket {
106     #[inline]
as_socket(&self) -> BorrowedSocket<'_>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"))]
113 impl AsFd for tokio::io::Stdin {
114     #[inline]
as_fd(&self) -> BorrowedFd115     fn as_fd(&self) -> BorrowedFd {
116         unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
117     }
118 }
119 
120 #[cfg(windows)]
121 impl AsHandle for tokio::io::Stdin {
122     #[inline]
as_handle(&self) -> BorrowedHandle123     fn as_handle(&self) -> BorrowedHandle {
124         unsafe { BorrowedHandle::borrow_raw(self.as_raw_handle()) }
125     }
126 }
127 
128 #[cfg(any(unix, target_os = "wasi"))]
129 impl AsFd for tokio::io::Stdout {
130     #[inline]
as_fd(&self) -> BorrowedFd<'_>131     fn as_fd(&self) -> BorrowedFd<'_> {
132         unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
133     }
134 }
135 
136 #[cfg(windows)]
137 impl AsHandle for tokio::io::Stdout {
138     #[inline]
as_handle(&self) -> BorrowedHandle<'_>139     fn as_handle(&self) -> BorrowedHandle<'_> {
140         unsafe { BorrowedHandle::borrow_raw(self.as_raw_handle()) }
141     }
142 }
143 
144 #[cfg(any(unix, target_os = "wasi"))]
145 impl AsFd for tokio::io::Stderr {
146     #[inline]
as_fd(&self) -> BorrowedFd<'_>147     fn as_fd(&self) -> BorrowedFd<'_> {
148         unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
149     }
150 }
151 
152 #[cfg(windows)]
153 impl AsHandle for tokio::io::Stderr {
154     #[inline]
as_handle(&self) -> BorrowedHandle<'_>155     fn as_handle(&self) -> BorrowedHandle<'_> {
156         unsafe { BorrowedHandle::borrow_raw(self.as_raw_handle()) }
157     }
158 }
159 
160 #[cfg(unix)]
161 impl AsFd for tokio::net::UnixStream {
162     #[inline]
as_fd(&self) -> BorrowedFd<'_>163     fn as_fd(&self) -> BorrowedFd<'_> {
164         unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
165     }
166 }
167 
168 #[cfg(unix)]
169 impl AsFd for tokio::net::UnixListener {
170     #[inline]
as_fd(&self) -> BorrowedFd<'_>171     fn as_fd(&self) -> BorrowedFd<'_> {
172         unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
173     }
174 }
175 
176 #[cfg(unix)]
177 impl AsFd for tokio::net::UnixDatagram {
178     #[inline]
as_fd(&self) -> BorrowedFd<'_>179     fn as_fd(&self) -> BorrowedFd<'_> {
180         unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
181     }
182 }
183 
184 #[cfg(any(unix, target_os = "wasi"))]
185 impl AsFd for tokio::process::ChildStdout {
186     #[inline]
as_fd(&self) -> BorrowedFd<'_>187     fn as_fd(&self) -> BorrowedFd<'_> {
188         unsafe { BorrowedFd::borrow_raw(self.as_raw_fd()) }
189     }
190 }
191 
192 #[cfg(windows)]
193 impl AsHandle for tokio::process::ChildStdin {
194     #[inline]
as_handle(&self) -> BorrowedHandle<'_>195     fn as_handle(&self) -> BorrowedHandle<'_> {
196         unsafe { BorrowedHandle::borrow_raw(self.as_raw_handle()) }
197     }
198 }
199 
200 #[cfg(windows)]
201 impl AsHandle for tokio::process::ChildStdout {
202     #[inline]
as_handle(&self) -> BorrowedHandle<'_>203     fn as_handle(&self) -> BorrowedHandle<'_> {
204         unsafe { BorrowedHandle::borrow_raw(self.as_raw_handle()) }
205     }
206 }
207 
208 #[cfg(windows)]
209 impl AsHandle for tokio::process::ChildStderr {
210     #[inline]
as_handle(&self) -> BorrowedHandle211     fn as_handle(&self) -> BorrowedHandle {
212         unsafe { BorrowedHandle::borrow_raw(self.as_raw_handle()) }
213     }
214 }
215