use std::collections::HashMap;
use crate::e173_types;
use super::misc::{DataType, EnumChoice, EnumInstanceChoices, Unit};
e173_types! {
#[serde(rename_all = "camelCase")]
pub struct CommandClass {
#[serde(rename = "@name")]
pub name: String,
#[serde(rename = "@description", skip_serializing_if = "Option::is_none")]
pub description: Option<String>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub arguments: HashMap<String, CommandArgument>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub returns: HashMap<String, CommandReturnValue>,
}
#[serde(rename_all = "camelCase")]
pub struct Command {
#[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(default, skip_serializing_if = "HashMap::is_empty")]
pub argument_choices: HashMap<String, EnumInstanceChoices>,
#[serde(default, skip_serializing_if = "HashMap::is_empty")]
pub return_choices: HashMap<String, EnumInstanceChoices>,
pub completion_notification: bool
}
#[serde(rename_all = "camelCase")]
pub struct CommandArgument {
#[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>,
pub required: bool,
}
#[serde(rename_all = "camelCase")]
pub struct CommandReturnValue {
#[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>,
pub required: bool,
}
}