pub trait DeviceControl<T> {
fn get_default_device(&mut self) -> Result<T, ControllerError>;
fn set_default_device(
&mut self,
name: &str
) -> Result<bool, ControllerError>;
fn list_devices(&mut self) -> Result<Vec<T>, ControllerError>;
fn get_device_by_index(&mut self, index: u32) -> Result<T, ControllerError>;
fn get_device_by_name(&mut self, name: &str) -> Result<T, ControllerError>;
fn set_device_volume_by_index(
&mut self,
index: u32,
volume: &ChannelVolumes
);
fn set_device_volume_by_name(&mut self, name: &str, volume: &ChannelVolumes);
fn set_device_mute_by_index(&mut self, index: u32, mute: bool);
fn set_device_mute_by_name(&mut self, name: &str, mute: bool);
fn increase_device_volume_by_percent(&mut self, index: u32, delta: f64);
fn decrease_device_volume_by_percent(&mut self, index: u32, delta: f64);
}