Skip to content

Commit

Permalink
Rollup merge of rust-lang#39372 - seanmonstar:more-addr-froms, r=alex…
Browse files Browse the repository at this point in the history
…crichton

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.
  • Loading branch information
frewsxcv authored Feb 8, 2017
2 parents f144122 + cd603e4 commit 3769fc8
Show file tree
Hide file tree
Showing 2 changed files with 29 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/libstd/net/addr.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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 {
Expand Down
22 changes: 22 additions & 0 deletions src/libstd/net/ip.rs
Original file line number Diff line number Diff line change
Expand Up @@ -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.
///
Expand Down Expand Up @@ -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(segments: [u16; 8]) -> IpAddr {
IpAddr::V6(Ipv6Addr::from(segments))
}
}

// Tests for this module
#[cfg(all(test, not(target_os = "emscripten")))]
mod tests {
Expand Down

0 comments on commit 3769fc8

Please sign in to comment.