1mod range;
2mod validate;
3
4pub use range::count_addresses_between;
5pub use range::count_addresses_between_str;
6pub use range::get_addresses_between;
7pub use range::get_addresses_between_str;
8pub use range::get_addresses_between_str_as_strings;
9pub use validate::is_valid_mac_addr;
10pub use validate::parse_mac_addr;
11
12use mac_address::MacAddress;
13
14pub fn format_mac_addr(addr: &MacAddress) -> String {
16 addr.to_string().to_lowercase()
17}
18
19#[cfg(test)]
20mod tests {
21 use super::*;
22
23 #[test]
24 fn test_parse_mac_addr() {
25 let addr = parse_mac_addr("aa:bb:cc:dd:ee:ff").unwrap();
26 assert_eq!(format_mac_addr(&addr), "aa:bb:cc:dd:ee:ff");
27 }
28
29 #[test]
30 fn test_is_valid_mac_addr() {
31 assert!(is_valid_mac_addr("aa:bb:cc:dd:ee:ff"));
32 assert!(!is_valid_mac_addr("invalid"));
33 }
34
35 #[test]
36 fn test_count_addresses_between() {
37 let addr1 = parse_mac_addr("00:00:00:00:00:00").unwrap();
38 let addr2 = parse_mac_addr("00:00:00:00:00:01").unwrap();
39 assert_eq!(count_addresses_between(&addr1, &addr2), 2);
40
41 assert_eq!(count_addresses_between(&addr2, &addr1), 2);
43 }
44
45 #[test]
46 fn test_larger_range() {
47 let addr1 = parse_mac_addr("00:00:00:00:00:00").unwrap();
48 let addr2 = parse_mac_addr("00:00:00:00:00:ff").unwrap();
49 assert_eq!(count_addresses_between(&addr1, &addr2), 256);
50 }
51
52 #[test]
53 fn test_count_addresses_between_str() {
54 let count = count_addresses_between_str("00:00:00:00:00:00", "00:00:00:00:00:01").unwrap();
56 assert_eq!(count, 2);
57
58 let count = count_addresses_between_str("00:00:00:00:00:01", "00:00:00:00:00:00").unwrap();
60 assert_eq!(count, 2);
61
62 let count = count_addresses_between_str("00:00:00:00:00:00", "00:00:00:00:00:ff").unwrap();
64 assert_eq!(count, 256);
65
66 assert!(count_addresses_between_str("invalid", "00:00:00:00:00:01").is_err());
68 }
69
70 #[test]
71 fn test_get_addresses_between() {
72 let addr1 = parse_mac_addr("00:00:00:00:00:00").unwrap();
73 let addr2 = parse_mac_addr("00:00:00:00:00:01").unwrap();
74 let addresses = get_addresses_between(&addr1, &addr2);
75 assert_eq!(addresses.len(), 2);
76 assert_eq!(addresses[0].to_string().to_lowercase(), "00:00:00:00:00:00");
77 assert_eq!(addresses[1].to_string().to_lowercase(), "00:00:00:00:00:01");
78 }
79
80 #[test]
81 fn test_get_addresses_between_str() {
82 let addresses =
83 get_addresses_between_str("00:00:00:00:00:00", "00:00:00:00:00:01").unwrap();
84 assert_eq!(addresses.len(), 2);
85 assert_eq!(addresses[0].to_string().to_lowercase(), "00:00:00:00:00:00");
86 assert_eq!(addresses[1].to_string().to_lowercase(), "00:00:00:00:00:01");
87
88 assert!(get_addresses_between_str("invalid", "00:00:00:00:00:01").is_err());
90 }
91
92 #[test]
93 fn test_get_addresses_between_str_as_strings() {
94 let addresses =
95 get_addresses_between_str_as_strings("00:00:00:00:00:00", "00:00:00:00:00:01").unwrap();
96 assert_eq!(addresses.len(), 2);
97 assert_eq!(addresses[0], "00:00:00:00:00:00");
98 assert_eq!(addresses[1], "00:00:00:00:00:01");
99
100 assert!(get_addresses_between_str_as_strings("invalid", "00:00:00:00:00:01").is_err());
102 }
103}