use crate::xiolisa::LoadableDevice;
use crate::{file_load_json as load_json, LoadPathPattern, Result};
use indexmap::{IndexMap, IndexSet};
use std::path::PathBuf;
#[derive(Debug)]
pub struct Device {
inner: crate::filesystem::Device,
}
impl Device {
pub fn new(inner: crate::filesystem::Device) -> Self {
Device { inner }
}
pub fn calibration_dir(&self, calibration_id: &str) -> PathBuf {
self.inner
.description_calibration_dir(calibration_id)
.join("xiolisa")
}
pub fn calibration_job_file(
&self,
calibration_id: &str,
job_id: &str,
) -> PathBuf {
self.calibration_dir(calibration_id)
.join(format!("{}.json", job_id))
}
pub fn sampling_dir(&self, sampling_id: &str) -> PathBuf {
self.inner.sampling_dir(sampling_id).join("xiolisa")
}
pub fn sampling_job_file(
&self,
sampling_id: &str,
job_id: &str,
) -> PathBuf {
self.sampling_dir(sampling_id)
.join(format!("{}.json", job_id))
}
}
impl LoadableDevice for Device {
fn load_calibration_mapping_index(
&self,
calibration_id: &str,
) -> Result<IndexSet<String>> {
IndexSet::load_path_pattern_from_dir(
self.calibration_dir(calibration_id),
"*.json",
)
}
fn load_calibration_mapping(
&self,
calibration_id: &str,
job_id: &str,
) -> Result<IndexMap<String, IndexMap<String, String>>> {
load_json(self.calibration_job_file(calibration_id, job_id))
}
fn load_sampling_mapping_index(
&self,
sampling_id: &str,
) -> Result<IndexSet<String>> {
IndexSet::load_path_pattern_from_dir(
self.sampling_dir(sampling_id),
"*.json",
)
}
fn load_sampling_mapping(
&self,
sampling_id: &str,
job_id: &str,
) -> Result<IndexMap<String, IndexMap<String, String>>> {
load_json(self.sampling_job_file(sampling_id, job_id))
}
}