mirror of
https://github.com/tokio-rs/tokio.git
synced 2026-08-19 00:00:09 +02:00
net: add more impls for ToSocketAddrs (#1760)
This commit is contained in:
+60
-9
@@ -1,9 +1,7 @@
|
||||
use crate::future;
|
||||
|
||||
use std::io;
|
||||
use std::net::{IpAddr, SocketAddr};
|
||||
#[cfg(feature = "dns")]
|
||||
use std::net::{Ipv4Addr, Ipv6Addr};
|
||||
use std::net::{IpAddr, Ipv4Addr, Ipv6Addr, SocketAddr, SocketAddrV4, SocketAddrV6};
|
||||
|
||||
/// Convert or resolve without blocking to one or more `SocketAddr` values.
|
||||
///
|
||||
@@ -32,6 +30,32 @@ impl sealed::ToSocketAddrsPriv for SocketAddr {
|
||||
}
|
||||
}
|
||||
|
||||
// ===== impl SocketAddrV4 =====
|
||||
|
||||
impl ToSocketAddrs for SocketAddrV4 {}
|
||||
|
||||
impl sealed::ToSocketAddrsPriv for SocketAddrV4 {
|
||||
type Iter = std::option::IntoIter<SocketAddr>;
|
||||
type Future = ReadyFuture<Self::Iter>;
|
||||
|
||||
fn to_socket_addrs(&self) -> Self::Future {
|
||||
SocketAddr::V4(*self).to_socket_addrs()
|
||||
}
|
||||
}
|
||||
|
||||
// ===== impl SocketAddrV6 =====
|
||||
|
||||
impl ToSocketAddrs for SocketAddrV6 {}
|
||||
|
||||
impl sealed::ToSocketAddrsPriv for SocketAddrV6 {
|
||||
type Iter = std::option::IntoIter<SocketAddr>;
|
||||
type Future = ReadyFuture<Self::Iter>;
|
||||
|
||||
fn to_socket_addrs(&self) -> Self::Future {
|
||||
SocketAddr::V6(*self).to_socket_addrs()
|
||||
}
|
||||
}
|
||||
|
||||
// ===== impl str =====
|
||||
|
||||
#[cfg(feature = "dns")]
|
||||
@@ -65,17 +89,16 @@ impl sealed::ToSocketAddrsPriv for str {
|
||||
// ===== impl (&str, u16) =====
|
||||
|
||||
#[cfg(feature = "dns")]
|
||||
impl ToSocketAddrs for (&'_ str, u16) {}
|
||||
impl ToSocketAddrs for (&str, u16) {}
|
||||
|
||||
#[cfg(feature = "dns")]
|
||||
impl sealed::ToSocketAddrsPriv for (&'_ str, u16) {
|
||||
impl sealed::ToSocketAddrsPriv for (&str, u16) {
|
||||
type Iter = sealed::OneOrMore;
|
||||
type Future = sealed::MaybeReady;
|
||||
|
||||
fn to_socket_addrs(&self) -> Self::Future {
|
||||
use crate::blocking;
|
||||
use sealed::MaybeReady;
|
||||
use std::net::{SocketAddrV4, SocketAddrV6};
|
||||
|
||||
let (host, port) = *self;
|
||||
|
||||
@@ -116,6 +139,34 @@ impl sealed::ToSocketAddrsPriv for (IpAddr, u16) {
|
||||
}
|
||||
}
|
||||
|
||||
// ===== impl (Ipv4Addr, u16) =====
|
||||
|
||||
impl ToSocketAddrs for (Ipv4Addr, u16) {}
|
||||
|
||||
impl sealed::ToSocketAddrsPriv for (Ipv4Addr, u16) {
|
||||
type Iter = std::option::IntoIter<SocketAddr>;
|
||||
type Future = ReadyFuture<Self::Iter>;
|
||||
|
||||
fn to_socket_addrs(&self) -> Self::Future {
|
||||
let (ip, port) = *self;
|
||||
SocketAddrV4::new(ip, port).to_socket_addrs()
|
||||
}
|
||||
}
|
||||
|
||||
// ===== impl (Ipv6Addr, u16) =====
|
||||
|
||||
impl ToSocketAddrs for (Ipv6Addr, u16) {}
|
||||
|
||||
impl sealed::ToSocketAddrsPriv for (Ipv6Addr, u16) {
|
||||
type Iter = std::option::IntoIter<SocketAddr>;
|
||||
type Future = ReadyFuture<Self::Iter>;
|
||||
|
||||
fn to_socket_addrs(&self) -> Self::Future {
|
||||
let (ip, port) = *self;
|
||||
SocketAddrV6::new(ip, port, 0, 0).to_socket_addrs()
|
||||
}
|
||||
}
|
||||
|
||||
// ===== impl String =====
|
||||
|
||||
#[cfg(feature = "dns")]
|
||||
@@ -131,11 +182,11 @@ impl sealed::ToSocketAddrsPriv for String {
|
||||
}
|
||||
}
|
||||
|
||||
// ===== impl &'_ impl ToSocketAddrs =====
|
||||
// ===== impl &impl ToSocketAddrs =====
|
||||
|
||||
impl<T: ToSocketAddrs + ?Sized> ToSocketAddrs for &'_ T {}
|
||||
impl<T: ToSocketAddrs + ?Sized> ToSocketAddrs for &T {}
|
||||
|
||||
impl<T> sealed::ToSocketAddrsPriv for &'_ T
|
||||
impl<T> sealed::ToSocketAddrsPriv for &T
|
||||
where
|
||||
T: sealed::ToSocketAddrsPriv + ?Sized,
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user