sim_lib_stream_host/
placement.rs1use std::fmt;
4
5mod audio;
6mod device;
7mod lan;
8
9use crate::site::DeviceSite;
10
11pub use audio::{AudioDeviceCard, AudioPlacementRequest, AudioSiteKey};
12pub use device::{DeviceDirection, DeviceKind, DeviceRecord, Placement};
13pub use lan::{
14 LanPlacementMode, LanPlacementReport, LanPlacementRequest, lan_bar_delay_mode_symbol,
15 lan_experimental_remote_sample_capability, lan_jitter_buffered_mode_symbol,
16 lan_peer_site_symbol, lan_pinned_sample_experimental_diagnostic,
17 lan_pinned_sample_refusal_diagnostic,
18};
19
20#[derive(Clone, Debug, PartialEq, Eq)]
22pub struct DevicePlacement {
23 pub encoder: DeviceSite,
25 pub adapter: DeviceSite,
27}
28
29impl DevicePlacement {
30 pub fn new(encoder: DeviceSite, adapter: DeviceSite) -> Self {
32 Self { encoder, adapter }
33 }
34
35 pub fn validate(&self) -> std::result::Result<(), PlacementError> {
37 if self.adapter.is_edge_local() {
38 Ok(())
39 } else {
40 Err(PlacementError::AdapterMustBeEdgeLocal)
41 }
42 }
43}
44
45#[derive(Clone, Copy, Debug, PartialEq, Eq)]
47pub enum PlacementError {
48 AdapterMustBeEdgeLocal,
50}
51
52impl fmt::Display for PlacementError {
53 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
54 match self {
55 Self::AdapterMustBeEdgeLocal => f.write_str("device adapter must be edge-local"),
56 }
57 }
58}
59
60impl std::error::Error for PlacementError {}