use alloc::sync::Arc;
use core::fmt::Debug;
use core::ops::Deref;
use crate::common::chunk::Chunk;
#[derive(Clone)]
pub struct AudioCallback(Arc<dyn AudioCallbackFn>);
impl Deref for AudioCallback {
type Target = dyn AudioCallbackFn;
fn deref(&self) -> &Self::Target {
self.0.deref()
}
}
impl Debug for AudioCallback {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
write!(f, "AudioCallback(..)")
}
}
impl<F> From<F> for AudioCallback
where
F: AudioCallbackFn,
{
fn from(f: F) -> Self {
Self(Arc::new(f))
}
}
pub trait AudioCallbackFn: Fn(Chunk) + Send + Sync + 'static {}
impl<F> AudioCallbackFn for F where F: Fn(Chunk) + Send + Sync + 'static {}