use std::net::IpAddr;
use cidr::{IpCidr, Ipv4Cidr};
#[inline]
pub(crate) const fn canonical_ip(ip: IpAddr) -> IpAddr {
ip.to_canonical()
}
pub(crate) const fn canonical_cidr(cidr: IpCidr) -> IpCidr {
let IpCidr::V6(v6) = cidr else {
return cidr;
};
let Some(network_length) = v6.network_length().checked_sub(96) else {
return cidr;
};
let Some(first_address) = v6.first_address().to_ipv4_mapped() else {
return cidr;
};
match Ipv4Cidr::new(first_address, network_length) {
Ok(v4) => IpCidr::V4(v4),
Err(_) => cidr,
}
}