use alloc::rc::Rc;
use core::ptr::NonNull;
use crate::ctypes::*;
#[derive(Clone)]
pub struct SynthSignal {
ptr: NonNull<CSynthSignalValue>,
_subclass: Rc<dyn SynthSignalSubclass>,
}
impl SynthSignal {
pub(crate) fn new(ptr: *mut CSynthSignalValue, subclass: Rc<dyn SynthSignalSubclass>) -> Self {
SynthSignal {
ptr: NonNull::new(ptr).unwrap(),
_subclass: subclass,
}
}
pub(crate) fn cptr(&self) -> *const CSynthSignalValue {
self.ptr.as_ptr()
}
}
impl core::fmt::Debug for SynthSignal {
fn fmt(&self, f: &mut core::fmt::Formatter<'_>) -> core::fmt::Result {
f.debug_struct("SynthSignal").field("ptr", &self.ptr).finish()
}
}
pub(crate) trait SynthSignalSubclass {}
pub trait AsSynthSignal: AsRef<SynthSignal> + AsMut<SynthSignal> {
fn as_signal(&self) -> &SynthSignal {
self.as_ref()
}
fn as_signal_mut(&mut self) -> &mut SynthSignal {
self.as_mut()
}
}
impl<T> AsSynthSignal for T where T: AsRef<SynthSignal> + AsMut<SynthSignal> {}