use bare_types::net::{Ipv4Range, Ipv6Range};
fn main() {
println!("=== IPv4 Range Operations ===\n");
let range: Ipv4Range = "192.168.1.0-192.168.1.255".parse().unwrap();
println!("Created range: {}", range);
println!("Start: {}", range.start());
println!("End: {}", range.end());
println!("Number of addresses: {}\n", range.num_addresses());
let ip = core::net::Ipv4Addr::new(192, 168, 1, 100);
println!("Contains {}: {}\n", ip, range.contains(&ip));
println!("Is CIDR compatible: {}", range.is_cidr_compatible());
if range.is_cidr_compatible() {
println!("CIDR prefix length: {:?}\n", range.cidr_prefix_len());
}
let sub_range: Ipv4Range = "192.168.1.100-192.168.1.200".parse().unwrap();
println!(" subrange: {}", sub_range);
println!(
"range contains subrange: {}",
range.contains_range(&sub_range)
);
let overlap_range: Ipv4Range = "192.168.1.200-192.168.2.50".parse().unwrap();
println!("\nOverlap range: {}", overlap_range);
println!("Ranges overlap: {}", range.overlaps(&overlap_range));
let adjacent: Ipv4Range = "192.168.2.0-192.168.2.255".parse().unwrap();
println!("\nAdjacent range: {}", adjacent);
println!("Is adjacent: {}", range.is_adjacent_to(&adjacent));
if let Some(merged) = range.merge(&adjacent) {
println!("\nMerged range: {}", merged);
}
println!("\n=== IPv6 Range Operations ===\n");
let range6: Ipv6Range = "2001:db8::1-2001:db8::ffff".parse().unwrap();
println!("Created range: {}", range6);
println!("Number of addresses: {}\n", range6.num_addresses());
println!("Is CIDR compatible: {}", range6.is_cidr_compatible());
if let Some(prefix) = range6.cidr_prefix_len() {
println!("CIDR prefix length: {}", prefix);
}
}