use std::net::{IpAddr, ToSocketAddrs};
pub fn resolve_host(host: &str) -> Result<IpAddr, String> {
if let Ok(parsed_ip) = host.parse::<IpAddr>() {
return Ok(parsed_ip);
}
let full = format!("{}:0", host);
match full.to_socket_addrs() {
Ok(mut iter) => {
if let Some(sockaddr) = iter.next() {
Ok(sockaddr.ip())
} else {
Err(format!("No IP addresses found for '{}'", host))
}
}
Err(e) => Err(format!("DNS resolution failed for '{}': {}", host, e)),
}
}
#[allow(dead_code)]
pub fn make_display_host_str(maybe_host: &Option<String>, ip: IpAddr) -> String {
let ip_s = ip.to_string();
if let Some(h) = maybe_host {
if *h == ip_s {
ip_s
} else {
format!("{} ({})", h, ip_s)
}
} else {
ip_s
}
}