use crate::{
CalibrationDescription, Device, DeviceDescription, Result, Sampling,
};
use indexmap::{IndexMap, IndexSet};
pub trait LoadableDevice {
type ArnalisaLoadableDevice: crate::arnalisa::LoadableDevice;
type ArnalisamplicLoadableDevice: crate::arnalisamplic::LoadableDevice;
type OmmuiLoadableDevice: crate::ommui::LoadableDevice;
type SamplicLoadableDevice: crate::samplic::LoadableDevice;
type XioLoadableDevice: crate::xio::LoadableDevice;
type XiolisaLoadableDevice: crate::xiolisa::LoadableDevice;
fn arnalisa(&self) -> Self::ArnalisaLoadableDevice;
fn arnalisamplic(&self) -> Self::ArnalisamplicLoadableDevice;
fn ommui(&self) -> Self::OmmuiLoadableDevice;
fn samplic(&self) -> Self::SamplicLoadableDevice;
fn xio(&self) -> Self::XioLoadableDevice;
fn xiolisa(&self) -> Self::XiolisaLoadableDevice;
fn load_calibration_description_index(
&self,
) -> Result<IndexSet<String>>;
fn load_calibration_description(
&self,
calibration_id: &str,
) -> Result<CalibrationDescription>;
fn load_calibration_descriptions(
&self,
) -> Result<IndexMap<String, CalibrationDescription>> {
self.load_calibration_description_index()?
.into_iter()
.map(|id| {
let item = self.load_calibration_description(&id)?;
Ok((id, item))
})
.collect::<Result<_>>()
}
fn load_sampling_index(&self) -> Result<IndexSet<String>>;
fn load_sampling(&self, sampling_id: &str) -> Result<Sampling>;
fn load_samplings(&self) -> Result<IndexMap<String, Sampling>> {
self.load_sampling_index()?
.into_iter()
.map(|id| {
let item = self.load_sampling(&id)?;
Ok((id, item))
})
.collect::<Result<_>>()
}
fn load_device_description(&self) -> Result<DeviceDescription>;
fn load_device(&self) -> Result<Device>;
}