mirror of
https://github.com/achanda/ipnetwork.git
synced 2025-06-17 01:08:53 +00:00
Another round of formatting
This commit is contained in:
@ -3,7 +3,7 @@ use std::fmt;
|
||||
use std::error::Error;
|
||||
|
||||
/// Represents a bunch of errors that can occur while working with a `IpNetwork`
|
||||
#[derive(Debug,Clone,PartialEq,Eq)]
|
||||
#[derive(Debug, Clone, PartialEq, Eq)]
|
||||
pub enum IpNetworkError {
|
||||
InvalidAddr(String),
|
||||
InvalidPrefix,
|
||||
@ -29,23 +29,30 @@ impl Error for IpNetworkError {
|
||||
InvalidPrefix => "prefix is invalid",
|
||||
InvalidCidrFormat(_) => "cidr is invalid",
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
pub fn cidr_parts(cidr: &str) -> Result<(&str, &str), IpNetworkError> {
|
||||
let parts = cidr.split('/').collect::<Vec<&str>>();
|
||||
if parts.len() == 1 {
|
||||
Err(IpNetworkError::InvalidCidrFormat(format!("CIDR must contain '/': {}", cidr)))
|
||||
Err(IpNetworkError::InvalidCidrFormat(format!(
|
||||
"CIDR must contain '/': {}",
|
||||
cidr
|
||||
)))
|
||||
} else if parts.len() == 2 {
|
||||
Ok((parts[0], parts[1]))
|
||||
} else {
|
||||
Err(IpNetworkError::InvalidCidrFormat(format!("CIDR must contain a single '/': {}", cidr)))
|
||||
Err(IpNetworkError::InvalidCidrFormat(format!(
|
||||
"CIDR must contain a single '/': {}",
|
||||
cidr
|
||||
)))
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse_prefix(prefix: &str, max: u8) -> Result<u8, IpNetworkError> {
|
||||
let mask = prefix.parse::<u8>().map_err(|_| IpNetworkError::InvalidPrefix)?;
|
||||
let mask = prefix
|
||||
.parse::<u8>()
|
||||
.map_err(|_| IpNetworkError::InvalidPrefix)?;
|
||||
if mask > max {
|
||||
Err(IpNetworkError::InvalidPrefix)
|
||||
} else {
|
||||
@ -58,11 +65,14 @@ pub fn parse_addr(addr: &str) -> Result<Ipv4Addr, IpNetworkError> {
|
||||
let mut bytes = [0; 4];
|
||||
for (i, byte) in addr_parts.enumerate() {
|
||||
if i >= 4 {
|
||||
return Err(IpNetworkError::InvalidAddr(format!("More than 4 bytes: {}", addr)));
|
||||
return Err(IpNetworkError::InvalidAddr(format!(
|
||||
"More than 4 bytes: {}",
|
||||
addr
|
||||
)));
|
||||
}
|
||||
bytes[i] = byte.map_err(|_| {
|
||||
IpNetworkError::InvalidAddr(format!("All bytes not 0-255: {}", addr))
|
||||
})?;
|
||||
IpNetworkError::InvalidAddr(format!("All bytes not 0-255: {}", addr))
|
||||
})?;
|
||||
}
|
||||
Ok(Ipv4Addr::new(bytes[0], bytes[1], bytes[2], bytes[3]))
|
||||
}
|
||||
|
Reference in New Issue
Block a user