use super::*;
impl_veilid_log_facility!("rtab");
pub trait RoutingDomainEditorCommonTrait {
fn clear_dial_info_details(
&mut self,
address_type: Option<AddressType>,
protocol_type: Option<ProtocolType>,
) -> &mut Self;
fn set_relays(&mut self, relays: Vec<RoutingDomainRelay>) -> &mut Self;
fn set_relay_state(
&mut self,
relay: RoutingDomainRelay,
state: RoutingDomainRelayState,
) -> &mut Self;
#[cfg_attr(all(target_arch = "wasm32", target_os = "unknown"), expect(dead_code))]
fn add_dial_info(&mut self, dial_info: DialInfo, class: DialInfoClass) -> &mut Self;
fn setup_network(
&mut self,
outbound_protocols: ProtocolTypeSet,
inbound_protocols: ProtocolTypeSet,
address_types: AddressTypeSet,
capabilities: Vec<VeilidCapability>,
confirmed: bool,
) -> &mut Self;
fn commit(&mut self, pause_tasks: bool) -> PinBoxFuture<'_, bool>;
fn reset(&mut self) -> PinBoxFuture<'_, ()>;
fn publish(&mut self);
#[cfg_attr(all(target_arch = "wasm32", target_os = "unknown"), expect(dead_code))]
fn unpublish(&mut self);
}
pub(super) trait RoutingDomainDetailApplyCommonChange {
fn apply_common_change(&mut self, change: RoutingDomainChangeCommon);
}
impl<T: RoutingDomainDetailCommonAccessors + ?Sized> RoutingDomainDetailApplyCommonChange for T {
fn apply_common_change(&mut self, change: RoutingDomainChangeCommon) {
match change {
RoutingDomainChangeCommon::ClearDialInfoDetails {
address_type,
protocol_type,
} => {
self.common_mut()
.clear_dial_info_details(address_type, protocol_type);
}
RoutingDomainChangeCommon::SetRelays { relays } => self.common_mut().set_relays(relays),
RoutingDomainChangeCommon::SetRelayState { relay, state } => {
self.common_mut().set_relay_state(&relay, state)
}
RoutingDomainChangeCommon::AddDialInfo { dial_info_detail } => {
if !self.ensure_dial_info_is_valid(&dial_info_detail.dial_info) {
return;
}
self.common_mut()
.add_dial_info_detail(dial_info_detail.clone());
}
RoutingDomainChangeCommon::SetupNetwork {
outbound_protocols,
inbound_protocols,
address_types,
capabilities,
confirmed,
} => {
self.common_mut().setup_network(
outbound_protocols,
inbound_protocols,
address_types,
capabilities.clone(),
confirmed,
);
}
}
}
}
#[derive(Debug)]
pub(super) enum RoutingDomainChangeCommon {
ClearDialInfoDetails {
address_type: Option<AddressType>,
protocol_type: Option<ProtocolType>,
},
SetRelays {
relays: Vec<RoutingDomainRelay>,
},
SetRelayState {
relay: RoutingDomainRelay,
state: RoutingDomainRelayState,
},
AddDialInfo {
dial_info_detail: DialInfoDetail,
},
SetupNetwork {
outbound_protocols: ProtocolTypeSet,
inbound_protocols: ProtocolTypeSet,
address_types: AddressTypeSet,
capabilities: Vec<VeilidCapability>,
confirmed: bool,
},
}