Skip to content

Commit b8be345

Browse files
committed
Add blanket impls for mutable references
1 parent bec2c3c commit b8be345

File tree

4 files changed

+108
-1
lines changed

4 files changed

+108
-1
lines changed

CHANGELOG.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.
77

88
## Unreleased
99

10-
* None
10+
* Add blanket impls of all the traits for mutable references.
1111

1212
## [0.6.0] - 2021-05-25
1313

src/dns.rs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,3 +45,19 @@ pub trait Dns {
4545
/// [`rfc1035`]: https://tools.ietf.org/html/rfc1035
4646
fn get_host_by_address(&mut self, addr: IpAddr) -> nb::Result<String<256>, Self::Error>;
4747
}
48+
49+
impl<T: Dns> Dns for &mut T {
50+
type Error = T::Error;
51+
52+
fn get_host_by_name(
53+
&mut self,
54+
hostname: &str,
55+
addr_type: AddrType,
56+
) -> nb::Result<IpAddr, Self::Error> {
57+
T::get_host_by_name(self, hostname, addr_type)
58+
}
59+
60+
fn get_host_by_address(&mut self, addr: IpAddr) -> nb::Result<String<256>, Self::Error> {
61+
T::get_host_by_address(self, addr)
62+
}
63+
}

src/stack/tcp.rs

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,45 @@ pub trait TcpFullStack: TcpClientStack {
8080
socket: &mut Self::TcpSocket,
8181
) -> nb::Result<(Self::TcpSocket, SocketAddr), Self::Error>;
8282
}
83+
84+
impl<T: TcpClientStack> TcpClientStack for &mut T {
85+
type Error = T::Error;
86+
87+
type TcpSocket = T::TcpSocket;
88+
89+
fn socket(&mut self) -> Result<Self::TcpSocket, Self::Error> {
90+
T::socket(self)
91+
}
92+
93+
fn connect(
94+
&mut self,
95+
socket: &mut Self::TcpSocket,
96+
remote: SocketAddr,
97+
) -> nb::Result<(), Self::Error> {
98+
T::connect(self, socket, remote)
99+
}
100+
101+
fn is_connected(&mut self, socket: &Self::TcpSocket) -> Result<bool, Self::Error> {
102+
T::is_connected(self, socket)
103+
}
104+
105+
fn send(
106+
&mut self,
107+
socket: &mut Self::TcpSocket,
108+
buffer: &[u8],
109+
) -> nb::Result<usize, Self::Error> {
110+
T::send(self, socket, buffer)
111+
}
112+
113+
fn receive(
114+
&mut self,
115+
socket: &mut Self::TcpSocket,
116+
buffer: &mut [u8],
117+
) -> nb::Result<usize, Self::Error> {
118+
T::receive(self, socket, buffer)
119+
}
120+
121+
fn close(&mut self, socket: Self::TcpSocket) -> Result<(), Self::Error> {
122+
T::close(self, socket)
123+
}
124+
}

src/stack/udp.rs

Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,52 @@ pub trait UdpFullStack: UdpClientStack {
5959
buffer: &[u8],
6060
) -> nb::Result<(), Self::Error>;
6161
}
62+
63+
impl<T: UdpClientStack> UdpClientStack for &mut T {
64+
type Error = T::Error;
65+
66+
type UdpSocket = T::UdpSocket;
67+
68+
fn socket(&mut self) -> Result<Self::UdpSocket, Self::Error> {
69+
T::socket(self)
70+
}
71+
72+
fn connect(
73+
&mut self,
74+
socket: &mut Self::UdpSocket,
75+
remote: SocketAddr,
76+
) -> Result<(), Self::Error> {
77+
T::connect(self, socket, remote)
78+
}
79+
80+
fn send(&mut self, socket: &mut Self::UdpSocket, buffer: &[u8]) -> nb::Result<(), Self::Error> {
81+
T::send(self, socket, buffer)
82+
}
83+
84+
fn receive(
85+
&mut self,
86+
socket: &mut Self::UdpSocket,
87+
buffer: &mut [u8],
88+
) -> nb::Result<(usize, SocketAddr), Self::Error> {
89+
T::receive(self, socket, buffer)
90+
}
91+
92+
fn close(&mut self, socket: Self::UdpSocket) -> Result<(), Self::Error> {
93+
T::close(self, socket)
94+
}
95+
}
96+
97+
impl<T: UdpFullStack> UdpFullStack for &mut T {
98+
fn bind(&mut self, socket: &mut Self::UdpSocket, local_port: u16) -> Result<(), Self::Error> {
99+
T::bind(self, socket, local_port)
100+
}
101+
102+
fn send_to(
103+
&mut self,
104+
socket: &mut Self::UdpSocket,
105+
remote: SocketAddr,
106+
buffer: &[u8],
107+
) -> nb::Result<(), Self::Error> {
108+
T::send_to(self, socket, remote, buffer)
109+
}
110+
}

0 commit comments

Comments
 (0)