From 87dcbcada247560d9ce5df28dd76034182e5b492 Mon Sep 17 00:00:00 2001 From: Sean McArthur Date: Sat, 28 Jan 2017 12:53:17 -0800 Subject: [PATCH 1/2] add From<[u8; n]> impls for IpAddr --- src/libstd/net/ip.rs | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/libstd/net/ip.rs b/src/libstd/net/ip.rs index 7803cf728f2e9..cfd06dfcdd51b 100644 --- a/src/libstd/net/ip.rs +++ b/src/libstd/net/ip.rs @@ -656,6 +656,13 @@ impl From<[u8; 4]> for Ipv4Addr { } } +#[stable(feature = "ip_from_slice", since = "1.17.0")] +impl From<[u8; 4]> for IpAddr { + fn from(octets: [u8; 4]) -> IpAddr { + IpAddr::V4(Ipv4Addr::from(octets)) + } +} + impl Ipv6Addr { /// Creates a new IPv6 address from eight 16-bit segments. /// @@ -1166,6 +1173,21 @@ impl From<[u16; 8]> for Ipv6Addr { } } + +#[stable(feature = "ip_from_slice", since = "1.17.0")] +impl From<[u8; 16]> for IpAddr { + fn from(octets: [u8; 16]) -> IpAddr { + IpAddr::V6(Ipv6Addr::from(octets)) + } +} + +#[stable(feature = "ip_from_slice", since = "1.17.0")] +impl From<[u16; 8]> for IpAddr { + fn from(octets: [u16; 8]) -> IpAddr { + IpAddr::V6(Ipv6Addr::from(octets)) + } +} + // Tests for this module #[cfg(all(test, not(target_os = "emscripten")))] mod tests { From cd603e43241561edf9b2fa56a65a37afe20e8610 Mon Sep 17 00:00:00 2001 From: Sean McArthur Date: Sat, 28 Jan 2017 12:54:09 -0800 Subject: [PATCH 2/2] add From<(I, u16)> for SocketAddr where I: Into --- src/libstd/net/addr.rs | 7 +++++++ src/libstd/net/ip.rs | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/src/libstd/net/addr.rs b/src/libstd/net/addr.rs index 751878c687c01..84c4acb8d9247 100644 --- a/src/libstd/net/addr.rs +++ b/src/libstd/net/addr.rs @@ -456,6 +456,13 @@ impl From for SocketAddr { } } +#[stable(feature = "addr_from_into_ip", since = "1.17.0")] +impl> From<(I, u16)> for SocketAddr { + fn from(pieces: (I, u16)) -> SocketAddr { + SocketAddr::new(pieces.0.into(), pieces.1) + } +} + impl<'a> IntoInner<(*const c::sockaddr, c::socklen_t)> for &'a SocketAddr { fn into_inner(self) -> (*const c::sockaddr, c::socklen_t) { match *self { diff --git a/src/libstd/net/ip.rs b/src/libstd/net/ip.rs index cfd06dfcdd51b..b6bd6f8d0a28e 100644 --- a/src/libstd/net/ip.rs +++ b/src/libstd/net/ip.rs @@ -1183,8 +1183,8 @@ impl From<[u8; 16]> for IpAddr { #[stable(feature = "ip_from_slice", since = "1.17.0")] impl From<[u16; 8]> for IpAddr { - fn from(octets: [u16; 8]) -> IpAddr { - IpAddr::V6(Ipv6Addr::from(octets)) + fn from(segments: [u16; 8]) -> IpAddr { + IpAddr::V6(Ipv6Addr::from(segments)) } }