Skip to content

Commit b581d7a

Browse files
committed
Refactor the From implementations
Now uses a single from! macro for all conversions.
1 parent 438c0e1 commit b581d7a

File tree

3 files changed

+30
-90
lines changed

3 files changed

+30
-90
lines changed

src/lib.rs

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,24 @@ macro_rules! impl_debug {
101101
};
102102
}
103103

104+
/// Macro to convert from one network type to another.
105+
macro_rules! from {
106+
($from: ty, $for: ty) => {
107+
impl From<$from> for $for {
108+
fn from(socket: $from) -> $for {
109+
#[cfg(unix)]
110+
unsafe {
111+
<$for>::from_raw_fd(socket.into_raw_fd())
112+
}
113+
#[cfg(windows)]
114+
unsafe {
115+
<$for>::from_raw_socket(socket.into_raw_socket())
116+
}
117+
}
118+
}
119+
};
120+
}
121+
104122
mod sockaddr;
105123
mod socket;
106124
mod sockref;

src/socket.rs

Lines changed: 6 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1303,55 +1303,12 @@ impl fmt::Debug for Socket {
13031303
}
13041304
}
13051305

1306-
/// Macro to convert from one network type to another.
1307-
macro_rules! from_raw {
1308-
($ty: ty, $socket: expr) => {{
1309-
#[cfg(unix)]
1310-
unsafe {
1311-
<$ty>::from_raw_fd($socket.into_raw_fd())
1312-
}
1313-
#[cfg(windows)]
1314-
unsafe {
1315-
<$ty>::from_raw_socket($socket.into_raw_socket())
1316-
}
1317-
}};
1318-
}
1319-
1320-
impl From<net::TcpStream> for Socket {
1321-
fn from(socket: net::TcpStream) -> Socket {
1322-
from_raw!(Socket, socket)
1323-
}
1324-
}
1325-
1326-
impl From<net::TcpListener> for Socket {
1327-
fn from(socket: net::TcpListener) -> Socket {
1328-
from_raw!(Socket, socket)
1329-
}
1330-
}
1331-
1332-
impl From<net::UdpSocket> for Socket {
1333-
fn from(socket: net::UdpSocket) -> Socket {
1334-
from_raw!(Socket, socket)
1335-
}
1336-
}
1337-
1338-
impl From<Socket> for net::TcpStream {
1339-
fn from(socket: Socket) -> net::TcpStream {
1340-
from_raw!(net::TcpStream, socket)
1341-
}
1342-
}
1343-
1344-
impl From<Socket> for net::TcpListener {
1345-
fn from(socket: Socket) -> net::TcpListener {
1346-
from_raw!(net::TcpListener, socket)
1347-
}
1348-
}
1349-
1350-
impl From<Socket> for net::UdpSocket {
1351-
fn from(socket: Socket) -> net::UdpSocket {
1352-
from_raw!(net::UdpSocket, socket)
1353-
}
1354-
}
1306+
from!(net::TcpStream, Socket);
1307+
from!(net::TcpListener, Socket);
1308+
from!(net::UdpSocket, Socket);
1309+
from!(Socket, net::TcpStream);
1310+
from!(Socket, net::TcpListener);
1311+
from!(Socket, net::UdpSocket);
13551312

13561313
impl Drop for Socket {
13571314
fn drop(&mut self) {

src/sys/unix.rs

Lines changed: 6 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -966,52 +966,17 @@ impl FromRawFd for crate::Socket {
966966
}
967967

968968
#[cfg(feature = "all")]
969-
impl From<crate::Socket> for UnixStream {
970-
fn from(socket: crate::Socket) -> UnixStream {
971-
unsafe { UnixStream::from_raw_fd(socket.into_raw_fd()) }
972-
}
973-
}
974-
969+
from!(UnixStream, crate::Socket);
975970
#[cfg(feature = "all")]
976-
impl From<crate::Socket> for UnixListener {
977-
fn from(socket: crate::Socket) -> UnixListener {
978-
unsafe { UnixListener::from_raw_fd(socket.into_raw_fd()) }
979-
}
980-
}
981-
971+
from!(UnixListener, crate::Socket);
982972
#[cfg(feature = "all")]
983-
impl From<crate::Socket> for UnixDatagram {
984-
fn from(socket: crate::Socket) -> UnixDatagram {
985-
unsafe { UnixDatagram::from_raw_fd(socket.into_raw_fd()) }
986-
}
987-
}
988-
973+
from!(UnixDatagram, crate::Socket);
989974
#[cfg(feature = "all")]
990-
impl From<UnixStream> for crate::Socket {
991-
fn from(socket: UnixStream) -> crate::Socket {
992-
crate::Socket {
993-
inner: socket.into_raw_fd(),
994-
}
995-
}
996-
}
997-
975+
from!(crate::Socket, UnixStream);
998976
#[cfg(feature = "all")]
999-
impl From<UnixListener> for crate::Socket {
1000-
fn from(socket: UnixListener) -> crate::Socket {
1001-
crate::Socket {
1002-
inner: socket.into_raw_fd(),
1003-
}
1004-
}
1005-
}
1006-
977+
from!(crate::Socket, UnixListener);
1007978
#[cfg(feature = "all")]
1008-
impl From<UnixDatagram> for crate::Socket {
1009-
fn from(socket: UnixDatagram) -> crate::Socket {
1010-
crate::Socket {
1011-
inner: socket.into_raw_fd(),
1012-
}
1013-
}
1014-
}
979+
from!(crate::Socket, UnixDatagram);
1015980

1016981
#[test]
1017982
fn test_ip() {

0 commit comments

Comments
 (0)