net-mumu 0.2.0-rc.3

Network tools plugin for the Lava language
Documentation
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
    }
}