mirror of
https://github.com/achanda/ipnetwork.git
synced 2025-06-15 08:36:34 +00:00
use an option
This commit is contained in:
@ -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 '/': {}",
|
||||
|
@ -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)
|
||||
}
|
||||
|
@ -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)
|
||||
}
|
||||
|
Reference in New Issue
Block a user