#[derive(Copy, Clone, Eq, PartialEq, Ord, PartialOrd, Hash, Debug)]
pub struct IPv4Address {
pub octets: [u8; 4],
}
impl IPv4Address {
pub const UNSPECIFIED: IPv4Address = IPv4Address::new(0, 0, 0, 0);
pub const LOCALHOST: IPv4Address = IPv4Address::new(127, 0, 0, 1);
pub const BROADCAST: IPv4Address = IPv4Address::new(255, 255, 255, 255);
}
impl IPv4Address {
pub const fn new(a: u8, b: u8, c: u8, d: u8) -> IPv4Address {
IPv4Address{ octets: [a, b, c, d] }
}
}
impl IPv4Address {
pub fn is_unspecified(&self) -> bool {
self == &IPv4Address::UNSPECIFIED
}
pub fn is_loopback(&self) -> bool {
self.octets[0] == 127
}
pub fn is_broadcast(&self) -> bool {
self == &IPv4Address::BROADCAST
}
}
impl ToString for IPv4Address {
fn to_string(&self) -> String {
format!("{}.{}.{}.{}", self.octets[0], self.octets[1], self.octets[2], self.octets[3])
}
}