use std::net::SocketAddr;
use sciparse::identifier::isd_asn::IsdAsn;
use serde::{Deserialize, Serialize};
use url::Url;
#[derive(Debug, Clone, Serialize, Deserialize, Default, PartialEq, Eq)]
pub struct Underlays {
pub udp_underlay: Vec<ScionRouter>,
pub snap_underlay: Vec<Snap>,
}
impl std::fmt::Display for Underlays {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"Underlays[udp: [{}] snap: [{}]]",
self.udp_underlay
.iter()
.map(|r| r.to_string())
.collect::<Vec<_>>()
.join(", "),
self.snap_underlay
.iter()
.map(|s| s.to_string())
.collect::<Vec<_>>()
.join(", ")
)
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
pub struct ScionRouter {
pub isd_as: IsdAsn,
pub internal_interface: SocketAddr,
pub interfaces: Vec<u16>,
}
impl std::fmt::Display for ScionRouter {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"ScionRouter[isd_as: {}, internal_interface: {}, interfaces: {:?}]",
self.isd_as, self.internal_interface, self.interfaces
)
}
}
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq, PartialOrd, Ord)]
pub struct Snap {
pub address: Url,
pub isd_ases: Vec<IsdAsn>,
}
impl std::fmt::Display for Snap {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
write!(
f,
"Snap[address: {}, isd_ases: {:?}]",
self.address, self.isd_ases
)
}
}