From 72326bd96f262ab6e9490a07c6664100a43c0ea1 Mon Sep 17 00:00:00 2001 From: sharks Date: Tue, 27 Mar 2018 21:58:10 -0500 Subject: [PATCH] use an option --- src/common.rs | 6 +++--- src/ipv4.rs | 7 +++---- src/ipv6.rs | 7 +++---- 3 files changed, 9 insertions(+), 11 deletions(-) diff --git a/src/common.rs b/src/common.rs index 904e52f..17ac193 100644 --- a/src/common.rs +++ b/src/common.rs @@ -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::>(); 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 '/': {}", diff --git a/src/ipv4.rs b/src/ipv4.rs index c5cc660..e0fd721 100644 --- a/src/ipv4.rs +++ b/src/ipv4.rs @@ -192,10 +192,9 @@ impl FromStr for Ipv4Network { fn from_str(s: &str) -> Result { 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) } diff --git a/src/ipv6.rs b/src/ipv6.rs index cbee659..711423e 100644 --- a/src/ipv6.rs +++ b/src/ipv6.rs @@ -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) }