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