If there is no prefix, default to number of bits ipv4/32, ipv6/128

This commit is contained in:
sharks
2018-03-27 21:36:39 -05:00
parent 82fef85a02
commit 5fabbc91d5
3 changed files with 17 additions and 3 deletions

View File

@ -35,7 +35,7 @@ impl Error for IpNetworkError {
pub fn cidr_parts(cidr: &str) -> Result<(&str, &str), IpNetworkError> {
let parts = cidr.split('/').collect::<Vec<&str>>();
if parts.len() == 1 {
Ok((parts[0], "32"))
Ok((parts[0], ""))
} else if parts.len() == 2 {
Ok((parts[0], parts[1]))
} else {

View File

@ -190,7 +190,14 @@ impl FromStr for Ipv4Network {
fn from_str(s: &str) -> Result<Ipv4Network, IpNetworkError> {
let (addr_str, prefix_str) = cidr_parts(s)?;
let addr = parse_addr(addr_str)?;
let prefix = parse_prefix(prefix_str, IPV4_BITS)?;
let prefix = parse_prefix(
if prefix_str.is_empty() {
IPV4_BITS.to_string()
} else {
prefix_str
},
IPV4_BITS,
)?;
Ipv4Network::new(addr, prefix)
}
}

View File

@ -170,7 +170,14 @@ impl FromStr for Ipv6Network {
let (addr_str, prefix_str) = cidr_parts(s)?;
let addr = Ipv6Addr::from_str(addr_str)
.map_err(|_| IpNetworkError::InvalidAddr(addr_str.to_string()))?;
let prefix = parse_prefix(prefix_str, IPV6_BITS)?;
let prefix = parse_prefix(
if prefix_str.is_empty() {
IPV6_BITS.to_string()
} else {
prefix_str
},
IPV6_BITS,
)?;
Ipv6Network::new(addr, prefix)
}
}