use std::net::Ipv6Addr;
use crate::functions::is_local_ipv4;
#[inline]
pub const fn is_local_ipv6(addr: Ipv6Addr) -> bool {
let segments = addr.segments();
let first = segments[0];
if (first & 0xFF00) == 0xFF00 {
first & 0x000F != 14 } else {
match segments {
[0, 0, 0, 0, 0, 0, 0, 0] | [0, 0, 0, 0, 0, 0, 0, 1] => {
return true;
},
_ => (),
}
match first & 0xFFC0 {
0xFE80 | 0xFEC0 => {
return true;
},
_ => (),
}
if first & 0xFE00 == 0xFC00 || (first == 0x2001) && (segments[1] == 0xDB8) {
return true;
}
match addr.to_ipv4() {
Some(addr) => is_local_ipv4(addr),
None => false,
}
}
}