use std::net::SocketAddr;
#[must_use]
pub fn host_from_sockaddr(sockaddr: &str) -> String {
sockaddr.parse::<SocketAddr>().map_or_else(
|_| {
if let Some((host, _)) = sockaddr.split_once(':') {
host.to_string()
} else {
sockaddr.to_string()
}
},
|sa| {
let ipaddr = sa.ip();
format!("{ipaddr}")
}
)
}
#[cfg(test)]
mod tests {
use super::host_from_sockaddr;
#[test]
fn simple() {
assert_eq!(host_from_sockaddr("foo:1234"), String::from("foo"));
assert_eq!(
host_from_sockaddr("127.0.0.1:1234"),
String::from("127.0.0.1")
);
}
}