use an option

This commit is contained in:
sharks
2018-03-27 21:58:10 -05:00
parent 411c71e900
commit 72326bd96f
3 changed files with 9 additions and 11 deletions

View File

@ -32,12 +32,12 @@ impl Error for IpNetworkError {
}
}
pub fn cidr_parts(cidr: &str) -> Result<(&str, &str), IpNetworkError> {
pub fn cidr_parts(cidr: &str) -> Result<(&str, Option<&str>), IpNetworkError> {
let parts = cidr.split('/').collect::<Vec<&str>>();
if parts.len() == 1 {
Ok((parts[0], ""))
Ok((parts[0], None))
} else if parts.len() == 2 {
Ok((parts[0], parts[1]))
Ok((parts[0], Some(parts[1])))
} else {
Err(IpNetworkError::InvalidCidrFormat(format!(
"CIDR must contain a single '/': {}",

View File

@ -192,10 +192,9 @@ 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 = if prefix_str.is_empty() {
IPV4_BITS
} else {
parse_prefix(prefix_str, IPV4_BITS)?
let prefix = match prefix_str {
Some(v) => parse_prefix(v, IPV4_BITS)?,
None => IPV4_BITS,
};
Ipv4Network::new(addr, prefix)
}

View File

@ -172,10 +172,9 @@ 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 = if prefix_str.is_empty() {
IPV6_BITS
} else {
parse_prefix(prefix_str, IPV6_BITS)?
let prefix = match prefix_str {
Some(v) => parse_prefix(v, IPV6_BITS)?,
None => IPV6_BITS,
};
Ipv6Network::new(addr, prefix)
}