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;
mod storable_device;
pub use loadable_device::LoadableDevice;
pub use storable_device::StorableDevice;
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct DeviceSettings {
pub language: String,
pub uuid: Uuid,
pub xio_device: Option<XioDevice>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct XioDevice {
pub url: String,
pub uuid: Uuid,
}
#[derive(Clone, Debug)]
pub struct Sampling {
pub settings: SamplingSettings,
}
#[derive(Serialize, Deserialize, Clone, 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, Clone, Debug, PartialEq)]
#[serde(rename_all = "PascalCase", tag = "type")]
pub enum Interface {
SingleAlignmentTabbed(SingleAlignmentTabbedInterface),
SingleValueWithProperties(SingleValueWithPropertiesInterface),
MultipleValuesWithProperties(MultipleValuesWithPropertiesInterface),
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SingleAlignmentTabbedInterface {
grid_columns: usize,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct SingleValueWithPropertiesInterface {
grid_columns: usize,
properties: Vec<IndexMap<String, samplic::Parameter>>,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct MultipleValuesWithPropertiesInterface {
grid_columns: usize,
properties: Vec<IndexMap<String, samplic::Parameter>>,
}
#[derive(Serialize, Deserialize, Clone, 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, Clone, Debug, PartialEq)]
#[serde(rename_all = "PascalCase")]
pub enum PreparationMode {
Disabled,
BeforeFirstMeasurement,
BeforeEveryMeasurement,
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq)]
#[serde(rename_all = "camelCase")]
pub struct MeasurementSettings {
pub grid_columns: usize,
}
#[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::Cartesian2dCoordinateSystemDescription,
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>,
}