diff options
| author | Corey Farwell <coreyf@rwell.org> | 2017-02-07 22:54:21 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-02-07 22:54:21 -0500 |
| commit | 1d67bb9a0c63b6dd664bdc05a53939ec4700071d (patch) | |
| tree | defe7372c566d4b51e3a25c5af597c12041eabb8 | |
| parent | 19977911ce8411db27e24c93a581b856c82f5f06 (diff) | |
| parent | cd603e43241561edf9b2fa56a65a37afe20e8610 (diff) | |
| download | rust-1d67bb9a0c63b6dd664bdc05a53939ec4700071d.tar.gz rust-1d67bb9a0c63b6dd664bdc05a53939ec4700071d.zip | |
Rollup merge of #39372 - seanmonstar:more-addr-froms, r=alexcrichton
A few ergonomic From impls for SocketAddr/IpAddr My main motivation is removing things like this: `"127.0.0.1:3000".parse().unwrap()`. Instead, this now works: `SocketAddr::from(([127, 0, 0, 1], 3000))` or even `([127, 0, 0, 1], 3000).into())` when passing to a function.
| -rw-r--r-- | src/libstd/net/addr.rs | 7 | ||||
| -rw-r--r-- | src/libstd/net/ip.rs | 22 |
2 files changed, 29 insertions, 0 deletions
diff --git a/src/libstd/net/addr.rs b/src/libstd/net/addr.rs index 751878c687c..84c4acb8d92 100644 --- a/src/libstd/net/addr.rs +++ b/src/libstd/net/addr.rs @@ -456,6 +456,13 @@ impl From<SocketAddrV6> for SocketAddr { } } +#[stable(feature = "addr_from_into_ip", since = "1.17.0")] +impl<I: Into<IpAddr>> 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 3dc89e390ee..5d6e8d319d7 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. /// @@ -1186,6 +1193,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(segments: [u16; 8]) -> IpAddr { + IpAddr::V6(Ipv6Addr::from(segments)) + } +} + // Tests for this module #[cfg(all(test, not(target_os = "emscripten")))] mod tests { |
