mirror of
https://github.com/achanda/ipnetwork.git
synced 2025-06-16 16:58:50 +00:00
Mark from_cidr as deprecated
- Also refactored a bit - Updated doc tests
This commit is contained in:
@ -1,3 +1,5 @@
|
||||
use std::net::Ipv4Addr;
|
||||
|
||||
#[derive(Debug,Clone,PartialEq,Eq)]
|
||||
pub enum IpNetworkError {
|
||||
InvalidAddr(String),
|
||||
@ -22,3 +24,17 @@ pub fn parse_prefix(prefix: &str, max: u8) -> Result<u8, IpNetworkError> {
|
||||
Ok(mask)
|
||||
}
|
||||
}
|
||||
|
||||
pub fn parse_addr(addr: &str) -> Result<Ipv4Addr, IpNetworkError> {
|
||||
let addr_parts = addr.split('.').map(|b| b.parse::<u8>());
|
||||
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)));
|
||||
}
|
||||
bytes[i] = try!(byte.map_err(|_| {
|
||||
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