use crate::ommui::{
CalibrationDescription, DeviceSettings, SampleCachedInformation,
Sampling, SamplingSettings,
};
use crate::Result;
use arnalisa::Calibration;
use indexmap::{IndexMap, IndexSet};
use uuid::Uuid;
pub trait LoadableDevice {
fn load_system_profile_index(&self) -> Result<IndexSet<Uuid>>;
fn load_user_profile_index(&self) -> Result<IndexSet<Uuid>>;
fn load_calibration_index(&self) -> Result<IndexSet<String>>;
fn load_device_settings(&self) -> Result<DeviceSettings>;
fn load_calibration_description(
&self,
calibration_id: &str,
) -> Result<CalibrationDescription>;
fn load_sampling_settings(
&self,
sampling_id: &str,
) -> Result<SamplingSettings>;
fn load_calibration(
&self,
calibration_id: &str,
) -> Result<Calibration>;
fn load_calibrations(&self) -> Result<IndexMap<String, Calibration>> {
self.load_calibration_index()?
.into_iter()
.map(|id| {
let item = self.load_calibration(&id)?;
Ok((id, item))
})
.collect::<Result<_>>()
}
fn load_sampling(&self, sampling_id: &str) -> Result<Sampling> {
Ok(Sampling {
settings: self.load_sampling_settings(sampling_id)?,
})
}
fn load_sample_cached_information(
&self,
) -> Result<IndexMap<Uuid, SampleCachedInformation>>;
}