use crate::parameter_groups::ParameterGroups;
use crate::parameter_info::ParameterInfo;
use crate::types::{ParameterId, ParameterValue};
pub trait ParameterStore: Send + Sync {
fn count(&self) -> usize;
fn info(&self, index: usize) -> Option<&ParameterInfo>;
fn get_normalized(&self, id: ParameterId) -> ParameterValue;
fn set_normalized(&self, id: ParameterId, value: ParameterValue);
fn normalized_to_string(&self, id: ParameterId, normalized: ParameterValue) -> String;
fn string_to_normalized(&self, id: ParameterId, string: &str) -> Option<ParameterValue>;
fn normalized_to_plain(&self, id: ParameterId, normalized: ParameterValue) -> ParameterValue;
fn plain_to_normalized(&self, id: ParameterId, plain: ParameterValue) -> ParameterValue;
fn info_by_id(&self, id: ParameterId) -> Option<&ParameterInfo> {
(0..self.count()).find_map(|i| {
let info = self.info(i)?;
if info.id == id {
Some(info)
} else {
None
}
})
}
}
#[derive(Debug, Clone, Copy, Default)]
pub struct NoParameters;
impl ParameterGroups for NoParameters {}
impl ParameterStore for NoParameters {
fn count(&self) -> usize {
0
}
fn info(&self, _index: usize) -> Option<&ParameterInfo> {
None
}
fn get_normalized(&self, _id: ParameterId) -> ParameterValue {
0.0
}
fn set_normalized(&self, _id: ParameterId, _value: ParameterValue) {}
fn normalized_to_string(&self, _id: ParameterId, _normalized: ParameterValue) -> String {
String::new()
}
fn string_to_normalized(&self, _id: ParameterId, _string: &str) -> Option<ParameterValue> {
None
}
fn normalized_to_plain(&self, _id: ParameterId, normalized: ParameterValue) -> ParameterValue {
normalized
}
fn plain_to_normalized(&self, _id: ParameterId, plain: ParameterValue) -> ParameterValue {
plain
}
}
impl crate::parameter_types::Parameters for NoParameters {
fn count(&self) -> usize {
0
}
fn iter(&self) -> Box<dyn Iterator<Item = &dyn crate::parameter_types::ParameterRef> + '_> {
Box::new(std::iter::empty())
}
fn by_id(&self, _id: ParameterId) -> Option<&dyn crate::parameter_types::ParameterRef> {
None
}
}