aboutsummaryrefslogtreecommitdiff
path: root/src/ip.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ip.rs')
-rw-r--r--src/ip.rs32
1 files changed, 15 insertions, 17 deletions
diff --git a/src/ip.rs b/src/ip.rs
index 068d38b..b49a2a0 100644
--- a/src/ip.rs
+++ b/src/ip.rs
@@ -29,7 +29,7 @@ pub fn parse_bsd_ipv4(s: &str) -> Result<Ipv4Addr, String> {
let parts: Vec<&str> = s.split('.').collect();
let n = parts.len();
- if n < 1 || n > 4 {
+ if !(1..=4).contains(&n) {
return Err("invalid number of parts".into());
}
@@ -41,33 +41,31 @@ pub fn parse_bsd_ipv4(s: &str) -> Result<Ipv4Addr, String> {
let addr: u32 = match n {
4 => {
- if parsed_parts[0] > 0xFF || parsed_parts[1] > 0xFF ||
- parsed_parts[2] > 0xFF || parsed_parts[3] > 0xFF {
+ if parsed_parts[0] > 0xFF
+ || parsed_parts[1] > 0xFF
+ || parsed_parts[2] > 0xFF
+ || parsed_parts[3] > 0xFF
+ {
return Err("invalid IP part out of range".into());
}
- (parsed_parts[0] << 24) |
- (parsed_parts[1] << 16) |
- (parsed_parts[2] << 8) |
- parsed_parts[3]
+ (parsed_parts[0] << 24)
+ | (parsed_parts[1] << 16)
+ | (parsed_parts[2] << 8)
+ | parsed_parts[3]
}
3 => {
if parsed_parts[0] > 0xFF || parsed_parts[1] > 0xFF || parsed_parts[2] > 0xFFFF {
return Err("invalid IP part out of range".into());
}
- (parsed_parts[0] << 24) |
- (parsed_parts[1] << 16) |
- parsed_parts[2]
+ (parsed_parts[0] << 24) | (parsed_parts[1] << 16) | parsed_parts[2]
}
2 => {
if parsed_parts[0] > 0xFF || parsed_parts[1] > 0xFFFFFF {
return Err("invalid IP part out of range".into());
}
- (parsed_parts[0] << 24) |
- parsed_parts[1]
- }
- 1 => {
- parsed_parts[0]
+ (parsed_parts[0] << 24) | parsed_parts[1]
}
+ 1 => parsed_parts[0],
_ => {
return Err("invalid number of parts".into());
}
@@ -81,11 +79,11 @@ pub fn parse_ip(s: &str) -> Result<IpAddr, String> {
if let Ok(ip) = s.parse::<Ipv6Addr>() {
return Ok(IpAddr::V6(ip));
}
-
+
// Try to parse as BSD valid IPv4
if let Ok(ipv4) = parse_bsd_ipv4(s) {
return Ok(IpAddr::V4(ipv4));
}
-
+
Err(format!("invalid IP address: {}", s))
}