1//! Implementations of io-lifetimes' traits for socket2'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 socket2::Socket {
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 socket2::Socket {
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 socket2::Socket {
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<socket2::Socket> for OwnedFd {
42    #[inline]
43    fn from(owned: socket2::Socket) -> Self {
44        unsafe { OwnedFd::from_raw_fd(owned.into_raw_fd()) }
45    }
46}
47
48#[cfg(windows)]
49impl IntoSocket for socket2::Socket {
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<socket2::Socket> for OwnedSocket {
58    #[inline]
59    fn from(owned: socket2::Socket) -> Self {
60        unsafe { Self::from_raw_socket(owned.into_raw_socket()) }
61    }
62}
63
64#[cfg(any(unix, target_os = "wasi"))]
65impl FromFd for socket2::Socket {
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 socket2::Socket {
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 socket2::Socket {
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 socket2::Socket {
90    #[inline]
91    fn from(owned: OwnedSocket) -> Self {
92        unsafe { Self::from_raw_socket(owned.into_raw_socket()) }
93    }
94}
95