diff options
| author | bors <bors@rust-lang.org> | 2017-01-24 01:17:09 +0000 |
|---|---|---|
| committer | bors <bors@rust-lang.org> | 2017-01-24 01:17:09 +0000 |
| commit | 18b6b8fb8fe781014a63b7523dfa73113213332b (patch) | |
| tree | b30c6ce14428ae79d4c43b41dd18a1e3f90bdb4a /src/libstd/net | |
| parent | a583f6f47cbfc4f0a21f70f7e4ed3e0fbe514c10 (diff) | |
| parent | a5f2f36ebdad455cbff8d6cb1b2647698299020a (diff) | |
| download | rust-18b6b8fb8fe781014a63b7523dfa73113213332b.tar.gz rust-18b6b8fb8fe781014a63b7523dfa73113213332b.zip | |
Auto merge of #39048 - lambda:impl-tosocketaddrs-for-string, r=alexcrichton
impl ToSocketAddrs for String
`ToSocketAddrs` is implemented for a number of different types,
including `(IpAddr, u16)`, `&str`, and various others, for the
convenience of being able to run things like
`TcpListener::bind("10.11.12.13:1415")`. However, because this is a
generic parameter with a trait bound, if you have a `String` you cannot
pass it in, either directly as `TcpListener::bind(string)`, or the
`TcpListener::bind(&string)` as you might expect due to deref coercion;
you have to use `TcpListener::bind(&*string)`, which is noisy and hard
to discover (though #39029 suggests better error messages to make it
more discoverable).
Rather than making people stumble over this, just implement
`ToSocketAddrs` for `String`.
Diffstat (limited to 'src/libstd/net')
| -rw-r--r-- | src/libstd/net/addr.rs | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/src/libstd/net/addr.rs b/src/libstd/net/addr.rs index f5348934310..d186a53311d 100644 --- a/src/libstd/net/addr.rs +++ b/src/libstd/net/addr.rs @@ -760,6 +760,14 @@ impl<'a, T: ToSocketAddrs + ?Sized> ToSocketAddrs for &'a T { } } +#[stable(feature = "string_to_socket_addrs", since = "1.16.0")] +impl ToSocketAddrs for String { + type Iter = vec::IntoIter<SocketAddr>; + fn to_socket_addrs(&self) -> io::Result<vec::IntoIter<SocketAddr>> { + (&**self).to_socket_addrs() + } +} + #[cfg(all(test, not(target_os = "emscripten")))] mod tests { use net::*; @@ -797,6 +805,18 @@ mod tests { assert!(tsa("localhost:23924").unwrap().contains(&a)); } + #[test] + fn to_socket_addr_string() { + let a = sa4(Ipv4Addr::new(77, 88, 21, 11), 24352); + assert_eq!(Ok(vec![a]), tsa(&*format!("{}:{}", "77.88.21.11", "24352"))); + assert_eq!(Ok(vec![a]), tsa(&format!("{}:{}", "77.88.21.11", "24352"))); + assert_eq!(Ok(vec![a]), tsa(format!("{}:{}", "77.88.21.11", "24352"))); + + let s = format!("{}:{}", "77.88.21.11", "24352"); + assert_eq!(Ok(vec![a]), tsa(s)); + // s has been moved into the tsa call + } + // FIXME: figure out why this fails on openbsd and bitrig and fix it #[test] #[cfg(not(any(windows, target_os = "openbsd", target_os = "bitrig")))] |
