use std::collections::HashSet;
use crate::e173_types;
use super::misc::{DataType, EnumChoice, EnumInstanceChoices, Lifetime, ParameterAccess, Unit};
e173_types! {
#[serde(rename_all = "camelCase")]
pub struct ParameterClass {
#[serde(rename = "@name")]
pub name: String,
#[serde(rename = "@description", skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
pub data_type: DataType,
#[serde(skip_serializing_if = "Option::is_none")]
pub unit: Option<Unit>,
#[serde(default, skip_serializing_if = "Vec::is_empty")]
pub choices: Vec<EnumChoice>,
}
#[serde(rename_all = "camelCase")]
pub struct Parameter {
#[serde(skip_serializing_if = "Option::is_none")]
pub library: Option<String>,
pub class: String,
#[serde(rename = "@friendlyName", skip_serializing_if = "Option::is_none")]
pub friendly_name: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dynamic_minimum: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub dynamic_maximum: Option<u32>,
#[serde(skip_serializing_if = "Option::is_none")]
pub count: Option<u32>,
pub access: HashSet<ParameterAccess>,
pub lifetime: Lifetime,
#[serde(skip_serializing_if = "Option::is_none")]
pub choices: Option<EnumInstanceChoices>,
#[serde(skip_serializing_if = "Option::is_none")]
pub atomic_identifier: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub minimum: Option<ParameterValue>,
#[serde(skip_serializing_if = "Option::is_none")]
pub maximum: Option<ParameterValue>,
#[serde(skip_serializing_if = "Option::is_none")]
pub minimum_modifier: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub maximum_modifier: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub default: Option<ParameterValue>,
#[serde(skip_serializing_if = "Option::is_none")]
pub wrapping: Option<bool>,
}
#[serde(untagged)]
pub enum ParameterValue {
Numeric(f64),
Bool(bool),
}
}