use std::{collections::HashMap, fmt::Debug, sync::Arc};
use scion_proto::address::IsdAsn;
use crate::network::local::external_as_handler::ExternalAsHandler;
#[derive(Clone, Default)]
pub struct ExternalAsRegistry {
external_as_mapping: HashMap<IsdAsn, Arc<dyn ExternalAsHandler>>,
}
impl Debug for ExternalAsRegistry {
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
f.debug_struct("ExternalAsRegistry")
.field("external_as_mapping", &self.external_as_mapping.keys())
.finish()
}
}
impl ExternalAsRegistry {
pub fn new() -> Self {
Self {
external_as_mapping: HashMap::new(),
}
}
pub fn register_external_as(&mut self, isd_asn: IsdAsn, adapter: Arc<dyn ExternalAsHandler>) {
self.external_as_mapping.insert(isd_asn, adapter);
}
pub fn contains_key(&self, isd_asn: &IsdAsn) -> bool {
self.external_as_mapping.contains_key(isd_asn)
}
pub fn get(&self, isd_asn: &IsdAsn) -> Option<&Arc<dyn ExternalAsHandler>> {
self.external_as_mapping.get(isd_asn)
}
}