use educe::Educe;
#[cfg(feature = "serde")]
use serde::{Deserialize, Serialize};
use crate::concepts::route::Source;
use crate::framework::{MAC, RoutingSystem};
#[derive(Educe)]
#[educe(Clone(bound()))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(bound = ""))]
pub enum Packet<T: RoutingSystem + ?Sized> {
UrgentRouteUpdate(RouteUpdate<T>),
BatchRouteUpdate { routes: Vec<RouteUpdate<T>> },
SeqnoRequest {
source: T::NodeAddress,
seqno: u16,
},
}
#[derive(Educe)]
#[educe(Clone(bound()))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(bound = ""))]
pub struct RouteUpdate<T: RoutingSystem + ?Sized> {
pub source: MAC<Source<T>, T>,
pub metric: u16,
}
#[derive(Educe)]
#[educe(Clone(bound()))]
#[cfg_attr(feature = "serde", derive(Serialize, Deserialize), serde(bound = ""))]
pub struct OutboundPacket<T: RoutingSystem + ?Sized> {
pub link: T::Link,
pub dest: T::NodeAddress,
pub packet: MAC<Packet<T>, T>,
}