amaru_network/
socket_addr.rs1use std::net::SocketAddr;
16
17use amaru_ouroboros::ToSocketAddrs;
18use tokio::net::lookup_host;
19
20pub async fn resolve(addr: ToSocketAddrs) -> std::io::Result<Vec<SocketAddr>> {
21 use ToSocketAddrs::*;
22 let result = match addr {
23 SocketAddrs(addr) => Ok(addr),
24 SocketAddrV4(addr) => Ok(vec![addr.into()]),
25 SocketAddrV6(addr) => Ok(vec![addr.into()]),
26 IpAddrs(addr) => Ok(addr.into_iter().map(|(addr, port)| (addr, port).into()).collect()),
27 IpAddrV4(addr, port) => Ok(vec![(addr, port).into()]),
28 IpAddrV6(addr, port) => Ok(vec![(addr, port).into()]),
29 String(addr) => Ok(lookup_host(&addr).await?.take(100).collect()),
30 };
31 tracing::info!(?result, "resolved addresses");
32 result
33}