#[derive(Default, Debug, Clone, Ord, PartialOrd, Eq, PartialEq, Hash)]
#[derive(Deserialize, Serialize)]
pub struct Route<HostAddress: InternetProtocolHostAddress>
{
#[serde(default = "Route::<HostAddress>::route_default")] pub router: Option<HostAddress>,
#[serde(default = "Route::<HostAddress>::media_access_control_address_default")] pub media_access_control_address: Option<MediaAccessControlAddress>,
#[serde(default)] pub ethernet_frame_length: EthernetFrameLength,
}
impl<HostAddress: InternetProtocolHostAddress> Route<HostAddress>
{
#[inline(always)]
pub fn next_hop_internet_protocol_host_address<'a>(&'a self, destination_internet_protocol_host_address: &'a HostAddress) -> &'a HostAddress
{
match self.router
{
None => destination_internet_protocol_host_address,
Some(ref router) => router,
}
}
#[inline(always)]
pub fn next_hop_media_access_control_address(&self, next_hop_internet_protocol_host_address: &HostAddress) -> Result<MediaAccessControlAddress, ()>
{
match self.media_access_control_address
{
Some(media_access_control_address) => Ok(media_access_control_address),
None => next_hop_internet_protocol_host_address.to_media_access_control_address(),
}
}
#[inline(always)]
pub fn next_hop_ethernet_frame_length(&self) -> EthernetFrameLength
{
self.ethernet_frame_length
}
#[inline(always)]
const fn route_default() -> Option<HostAddress>
{
None
}
#[inline(always)]
const fn media_access_control_address_default() -> Option<MediaAccessControlAddress>
{
None
}
}