mirror of
https://github.com/achanda/ipnetwork.git
synced 2025-06-16 16:58:50 +00:00
@ -17,7 +17,7 @@ pub fn cidr_parts<'a>(cidr: &'a str) -> Result<(&'a str, &'a str), IpNetworkErro
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn parse_prefix(prefix: &str, max: u8) -> Result<u8, IpNetworkError> {
|
pub fn parse_prefix(prefix: &str, max: u8) -> Result<u8, IpNetworkError> {
|
||||||
let mask = try!(prefix.parse::<u8>().map_err(|_| IpNetworkError::InvalidPrefix));
|
let mask = prefix.parse::<u8>().map_err(|_| IpNetworkError::InvalidPrefix)?;
|
||||||
if mask > max {
|
if mask > max {
|
||||||
Err(IpNetworkError::InvalidPrefix)
|
Err(IpNetworkError::InvalidPrefix)
|
||||||
} else {
|
} else {
|
||||||
@ -32,9 +32,9 @@ pub fn parse_addr(addr: &str) -> Result<Ipv4Addr, IpNetworkError> {
|
|||||||
if i >= 4 {
|
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] = try!(byte.map_err(|_| {
|
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]))
|
Ok(Ipv4Addr::new(bytes[0], bytes[1], bytes[2], bytes[3]))
|
||||||
}
|
}
|
||||||
|
10
src/ipv4.rs
10
src/ipv4.rs
@ -175,9 +175,9 @@ impl Ipv4Network {
|
|||||||
if i >= 4 {
|
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] = try!(byte.map_err(|_| {
|
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]))
|
Ok(Ipv4Addr::new(bytes[0], bytes[1], bytes[2], bytes[3]))
|
||||||
}
|
}
|
||||||
@ -206,9 +206,9 @@ impl fmt::Display for Ipv4Network {
|
|||||||
impl FromStr for Ipv4Network {
|
impl FromStr for Ipv4Network {
|
||||||
type Err = IpNetworkError;
|
type Err = IpNetworkError;
|
||||||
fn from_str(s: &str) -> Result<Ipv4Network, IpNetworkError> {
|
fn from_str(s: &str) -> Result<Ipv4Network, IpNetworkError> {
|
||||||
let (addr_str, prefix_str) = try!(cidr_parts(s));
|
let (addr_str, prefix_str) = cidr_parts(s)?;
|
||||||
let addr = try!(parse_addr(addr_str));
|
let addr = parse_addr(addr_str)?;
|
||||||
let prefix = try!(parse_prefix(prefix_str, IPV4_BITS));
|
let prefix = parse_prefix(prefix_str, IPV4_BITS)?;
|
||||||
Ipv4Network::new(addr, prefix)
|
Ipv4Network::new(addr, prefix)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -87,10 +87,10 @@ impl Ipv6Network {
|
|||||||
impl FromStr for Ipv6Network {
|
impl FromStr for Ipv6Network {
|
||||||
type Err = IpNetworkError;
|
type Err = IpNetworkError;
|
||||||
fn from_str(s: &str) -> Result<Ipv6Network, IpNetworkError> {
|
fn from_str(s: &str) -> Result<Ipv6Network, IpNetworkError> {
|
||||||
let (addr_str, prefix_str) = try!(cidr_parts(s));
|
let (addr_str, prefix_str) = cidr_parts(s)?;
|
||||||
let addr = try!(Ipv6Addr::from_str(addr_str)
|
let addr = Ipv6Addr::from_str(addr_str)
|
||||||
.map_err(|_| IpNetworkError::InvalidAddr(format!("{}", addr_str))));
|
.map_err(|_| IpNetworkError::InvalidAddr(format!("{}", addr_str)))?;
|
||||||
let prefix = try!(parse_prefix(prefix_str, IPV6_BITS));
|
let prefix = parse_prefix(prefix_str, IPV6_BITS)?;
|
||||||
Ipv6Network::new(addr, prefix)
|
Ipv6Network::new(addr, prefix)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -24,8 +24,8 @@ pub enum IpNetwork {
|
|||||||
impl IpNetwork {
|
impl IpNetwork {
|
||||||
pub fn new(ip: IpAddr, prefix: u8) -> Result<IpNetwork, IpNetworkError> {
|
pub fn new(ip: IpAddr, prefix: u8) -> Result<IpNetwork, IpNetworkError> {
|
||||||
match ip {
|
match ip {
|
||||||
IpAddr::V4(a) => Ok(IpNetwork::V4(try!(Ipv4Network::new(a, prefix)))),
|
IpAddr::V4(a) => Ok(IpNetwork::V4(Ipv4Network::new(a, prefix)?)),
|
||||||
IpAddr::V6(a) => Ok(IpNetwork::V6(try!(Ipv6Network::new(a, prefix)))),
|
IpAddr::V6(a) => Ok(IpNetwork::V6(Ipv6Network::new(a, prefix)?)),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user