use std::fmt;
mod audio;
mod device;
mod lan;
use crate::site::DeviceSite;
pub use audio::{AudioDeviceCard, AudioPlacementRequest, AudioSiteKey};
pub use device::{DeviceDirection, DeviceKind, DeviceRecord, Placement};
pub use lan::{
LanPlacementMode, LanPlacementReport, LanPlacementRequest, lan_bar_delay_mode_symbol,
lan_experimental_remote_sample_capability, lan_jitter_buffered_mode_symbol,
lan_peer_site_symbol, lan_pinned_sample_experimental_diagnostic,
lan_pinned_sample_refusal_diagnostic,
};
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct DevicePlacement {
pub encoder: DeviceSite,
pub adapter: DeviceSite,
}
impl DevicePlacement {
pub fn new(encoder: DeviceSite, adapter: DeviceSite) -> Self {
Self { encoder, adapter }
}
pub fn validate(&self) -> std::result::Result<(), PlacementError> {
if self.adapter.is_edge_local() {
Ok(())
} else {
Err(PlacementError::AdapterMustBeEdgeLocal)
}
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub enum PlacementError {
AdapterMustBeEdgeLocal,
}
impl fmt::Display for PlacementError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::AdapterMustBeEdgeLocal => f.write_str("device adapter must be edge-local"),
}
}
}
impl std::error::Error for PlacementError {}