use crate::samplic;
use chrono::offset::Utc;
use chrono::DateTime;
use indexmap::IndexMap;
use uuid::Uuid;
pub mod filesystem;
pub mod interface;
mod loadable_device;
pub use loadable_device::LoadableDevice;
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SamplingSettings {
#[serde(default, skip_serializing_if = "Option::is_none")]
pub preparation: Option<PreparationSettings>,
pub measurement: MeasurementSettings,
pub interface: Interface,
#[serde(
rename = "idle_before_preparation",
default,
skip_serializing_if = "IndexMap::is_empty"
)]
pub idle_before_preparation_mapping: IndexMap<String, String>,
#[serde(
rename = "idle_before_measurement",
default,
skip_serializing_if = "IndexMap::is_empty"
)]
pub idle_before_measurement_mapping: IndexMap<String, String>,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase", tag = "type")]
pub enum Interface {
SingleAlignmentTabbed(SingleAlignmentTabbedInterface),
SingleValueWithProperties(SingleValueWithPropertiesInterface),
MultipleValuesWithProperties(MultipleValuesWithPropertiesInterface),
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SingleAlignmentTabbedInterface {
grid_columns: usize,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SingleValueWithPropertiesInterface {
grid_columns: usize,
properties: Vec<IndexMap<String, samplic::Parameter>>,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct MultipleValuesWithPropertiesInterface {
grid_columns: usize,
properties: Vec<IndexMap<String, samplic::Parameter>>,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct PreparationSettings {
#[serde(rename = "_caption")]
pub caption: String,
#[serde(rename = "_description")]
pub description: String,
pub icon_id: String,
pub mode: PreparationMode,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub timeout: Option<usize>,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub enum PreparationMode {
Disabled,
BeforeFirstMeasurement,
BeforeEveryMeasurement,
}
#[derive(Serialize, Deserialize, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct MeasurementSettings {
pub grid_columns: usize,
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct Calibration {
pub points: Vec<CalibrationPoint>,
pub timestamp: DateTime<Utc>,
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct CalibrationPoint {
pub coordinates: (f64, f64),
pub results: IndexMap<String, f64>,
}
#[derive(Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct SampleCachedInformation {
pub identifier: String,
pub uuid: Uuid,
pub measurement_count: usize,
pub moment: DateTime<Utc>,
pub source: samplic::Source,
}
#[derive(Clone, Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct CalibrationDescription {
#[serde(rename = "_caption")]
pub caption: String,
pub icon_id: String,
pub curve: crate::samplic::CoordinateSystemDescription,
pub jobs: IndexMap<String, CalibrationJobDescription>,
}
#[derive(Clone, Serialize, Deserialize, Debug)]
#[serde(rename_all = "camelCase")]
pub struct CalibrationJobDescription {
pub curve_mapping: IndexMap<String, String>,
#[serde(default, skip_serializing_if = "IndexMap::is_empty")]
pub parameters: IndexMap<String, crate::samplic::ParameterDescription>,
#[serde(default, skip_serializing_if = "IndexMap::is_empty")]
pub profile_parameters:
IndexMap<String, crate::samplic::ProfileParameterDescription>,
#[serde(default, skip_serializing_if = "Option::is_none")]
pub curve: Option<crate::samplic::CoordinateSystemDescription>,
}