1pub fn ipv4_to_int(ip: &str) -> Result<u32, &'static str> {
13 let mut result = 0;
14 let mut num = 0;
15 let mut count = 0;
16 for c in ip.chars() {
17 if c == '.' {
18 if count == 0 {
19 return Err("Invalid input");
20 }
21 result = result << 8 | num;
22 num = 0;
23 count = 0;
24 } else if c == ' ' {
25 return Err("Invalid input");
26 } else if c.is_digit(10) {
27 num = num * 10 + c.to_digit(10).unwrap();
28 count += 1;
29 } else {
30 return Err("Invalid input");
31 }
32 }
33 if count == 0 {
34 return Err("Invalid input");
35 }
36 result = result << 8 | num;
37 Ok(result)
38}
39
40#[cfg(test)]
41mod tests {
42 use super::*;
43
44 #[test]
45 fn test_ipv4_to_int() {
46 assert_eq!(ipv4_to_int("172.168.5.1"), Ok(2896692481));
47 assert_eq!(ipv4_to_int("1 72.168.5.1"), Err("Invalid input"));
48 assert_eq!(ipv4_to_int("172.168.5.1 "), Err("Invalid input"));
49 }
50}