use crate::models;
#[derive(Clone, Debug, serde::Deserialize, serde::Serialize)]
#[derive(derivative::Derivative)]
#[derivative(Default)]
pub struct MetricDefinition {
#[serde(rename = "@odata.context")]
#[serde(skip_deserializing)]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub odata_context: Option<models::odata_v4::Context>,
#[serde(rename = "@odata.etag")]
#[serde(skip_deserializing)]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub odata_etag: Option<models::odata_v4::Etag>,
#[serde(rename = "@odata.id")]
#[serde(skip_deserializing)]
pub odata_id: models::odata_v4::Id,
#[serde(rename = "@odata.type")]
#[serde(skip_deserializing)]
#[derivative(Default(value = "models::odata_v4::Type(\"#MetricDefinition.v1_3_1.MetricDefinition\".to_string())"))]
pub odata_type: models::odata_v4::Type,
#[serde(rename = "Accuracy")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub accuracy: Option<f64>,
#[serde(rename = "Actions")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub actions: Option<models::metric_definition::v1_3_1::Actions>,
#[serde(rename = "Calculable")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub calculable: Option<models::metric_definition::v1_3_1::Calculable>,
#[serde(rename = "CalculationAlgorithm")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub calculation_algorithm: Option<models::metric_definition::v1_3_1::CalculationAlgorithmEnum>,
#[serde(rename = "CalculationParameters")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub calculation_parameters: Option<Vec<models::metric_definition::v1_3_1::CalculationParamsType>>,
#[serde(rename = "CalculationTimeInterval")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub calculation_time_interval: Option<String>,
#[serde(rename = "Calibration")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub calibration: Option<f64>,
#[serde(rename = "Description")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub description: Option<models::resource::Description>,
#[serde(rename = "DiscreteValues")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub discrete_values: Option<Vec<String>>,
#[serde(rename = "Id")]
#[serde(skip_deserializing)]
pub id: models::resource::Id,
#[serde(rename = "Implementation")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub implementation: Option<models::metric_definition::v1_3_1::ImplementationType>,
#[serde(rename = "IsLinear")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub is_linear: Option<bool>,
#[serde(rename = "LogicalContexts")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub logical_contexts: Option<Vec<models::physical_context::LogicalContext>>,
#[serde(rename = "MaxReadingRange")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub max_reading_range: Option<f64>,
#[serde(rename = "MetricDataType")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metric_data_type: Option<models::metric_definition::v1_3_1::MetricDataType>,
#[serde(rename = "MetricProperties")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metric_properties: Option<Vec<String>>,
#[serde(rename = "MetricType")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub metric_type: Option<models::metric_definition::v1_3_1::MetricType>,
#[serde(rename = "MinReadingRange")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub min_reading_range: Option<f64>,
#[serde(rename = "Name")]
#[serde(skip_deserializing)]
pub name: models::resource::Name,
#[serde(rename = "OEMCalculationAlgorithm")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub oem_calculation_algorithm: Option<String>,
#[serde(rename = "Oem")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub oem: Option<models::resource::Oem>,
#[serde(rename = "PhysicalContext")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub physical_context: Option<models::physical_context::PhysicalContext>,
#[serde(rename = "Precision")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub precision: Option<i64>,
#[serde(rename = "SensingInterval")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub sensing_interval: Option<String>,
#[serde(rename = "TimestampAccuracy")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub timestamp_accuracy: Option<String>,
#[serde(rename = "Units")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub units: Option<String>,
#[serde(rename = "Wildcards")]
#[serde(default, skip_serializing_if = "Option::is_none")]
pub wildcards: Option<Vec<models::metric_definition::v1_3_1::Wildcard>>,
}
impl crate::Metadata<'static> for MetricDefinition {
const JSON_SCHEMA: &'static str = "MetricDefinition.v1_3_1.json";
}