sim_lib_stream_host/
site.rs1use std::sync::Arc;
4
5use sim_kernel::Result;
6
7use crate::placement::{AudioDeviceCard, AudioSiteKey};
8use crate::{HostBackend, HostOpenStream, HostStreamConfigRequest};
9
10pub trait AudioSite: Send + Sync {
15 fn key(&self) -> &AudioSiteKey;
17
18 fn card(&self) -> &AudioDeviceCard;
20
21 fn open(&self, request: HostStreamConfigRequest) -> Result<HostOpenStream>;
27}
28
29pub struct ModeledAudioSite {
31 card: AudioDeviceCard,
32 backend: Arc<dyn HostBackend>,
33}
34
35impl ModeledAudioSite {
36 pub fn new(card: AudioDeviceCard, backend: Arc<dyn HostBackend>) -> Self {
38 Self { card, backend }
39 }
40}
41
42impl AudioSite for ModeledAudioSite {
43 fn key(&self) -> &AudioSiteKey {
44 &self.card.key
45 }
46
47 fn card(&self) -> &AudioDeviceCard {
48 &self.card
49 }
50
51 fn open(&self, request: HostStreamConfigRequest) -> Result<HostOpenStream> {
52 self.backend.open(request)
53 }
54}