use crate::framework::{MAC, RoutingSystem};
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use std::fmt::{Display, Formatter};
use std::hash::{Hash, Hasher};
use educe::Educe;
#[derive(Educe)]
#[educe(Clone(bound()))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(bound = ""))]
pub struct Route<T: RoutingSystem + ?Sized> {
pub source: MAC<Source<T>, T>,
pub metric: u16,
pub fd: u16,
pub link: T::Link,
pub next_hop: T::NodeAddress,
pub retracted: bool
}
#[derive(Educe)]
#[educe(Clone(bound()))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(bound = ""))]
pub struct ExternalRoute<T: RoutingSystem + ?Sized> {
pub source: MAC<Source<T>, T>,
pub metric: u16,
pub retracted: bool
}
#[derive(Educe)]
#[educe(Clone(bound()))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(bound = ""))]
pub struct Source<T: RoutingSystem + ?Sized> {
pub addr: T::NodeAddress,
pub seqno: u16,
}