use log::error;
use uuid::Uuid;
use crate::common::audiofox::Audiofox;
use crate::common::callback::AudioCallbackFn;
use crate::common::result::Result;
use crate::common::source::{AudioSource, AudioSources};
use crate::platform::mac::list::list;
use crate::platform::mac::stream::{StreamState, start_stream, stop_stream};
pub struct PlatformManager;
pub struct PlatformHandle(StreamState);
impl Audiofox for PlatformManager {
type LinkHandle = PlatformHandle;
fn start() -> Result<Self> {
Ok(Self)
}
fn list(&self) -> Result<AudioSources> {
list()
}
fn link<F>(&self, uuid: Uuid, sources: &[AudioSource], callback: F) -> Result<Self::LinkHandle>
where
F: AudioCallbackFn,
{
Ok(PlatformHandle(start_stream(uuid, sources, callback.into())?))
}
}
impl Drop for PlatformHandle {
fn drop(&mut self) {
if let Err(e) = stop_stream(&self.0) {
error!("cleanup failed: {e}");
}
}
}