use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Serialize, Deserialize, Default)]
#[serde(rename_all = "camelCase")]
pub struct AasEnvironment {
#[serde(default)]
pub asset_administration_shells: Vec<AssetAdministrationShell>,
#[serde(default)]
pub submodels: Vec<Submodel>,
#[serde(default)]
pub concept_descriptions: Vec<ConceptDescription>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssetAdministrationShell {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub id_short: Option<String>,
pub model_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub asset_information: Option<AssetInformation>,
#[serde(default)]
pub submodels: Vec<Reference>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct AssetInformation {
pub asset_kind: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub global_asset_id: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Submodel {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub id_short: Option<String>,
pub model_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub semantic_id: Option<Reference>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<Vec<LangString>>,
#[serde(default)]
pub submodel_elements: Vec<SubmodelElement>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(tag = "modelType")]
pub enum SubmodelElement {
Property(Property),
SubmodelElementCollection(SubmodelElementCollection),
Operation(Operation),
#[serde(other)]
Unknown,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Property {
#[serde(skip_serializing_if = "Option::is_none")]
pub id_short: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub semantic_id: Option<Reference>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<Vec<LangString>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub value_type: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub value: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct SubmodelElementCollection {
#[serde(skip_serializing_if = "Option::is_none")]
pub id_short: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub semantic_id: Option<Reference>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<Vec<LangString>>,
#[serde(default)]
pub value: Vec<SubmodelElement>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Operation {
#[serde(skip_serializing_if = "Option::is_none")]
pub id_short: Option<String>,
#[serde(skip_serializing_if = "Option::is_none")]
pub semantic_id: Option<Reference>,
#[serde(skip_serializing_if = "Option::is_none")]
pub description: Option<Vec<LangString>>,
#[serde(default)]
pub input_variables: Vec<OperationVariable>,
#[serde(default)]
pub output_variables: Vec<OperationVariable>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct OperationVariable {
pub value: Property,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Reference {
#[serde(rename = "type")]
pub ref_type: String,
pub keys: Vec<Key>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct Key {
#[serde(rename = "type")]
pub key_type: String,
pub value: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct LangString {
pub language: String,
pub text: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct ConceptDescription {
pub id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub id_short: Option<String>,
pub model_type: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub embedded_data_specifications: Option<Vec<EmbeddedDataSpecification>>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct EmbeddedDataSpecification {
pub data_specification: Reference,
pub data_specification_content: DataSpecificationIec61360,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct DataSpecificationIec61360 {
pub preferred_name: Vec<LangString>,
#[serde(skip_serializing_if = "Option::is_none")]
pub short_name: Option<Vec<LangString>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub definition: Option<Vec<LangString>>,
#[serde(skip_serializing_if = "Option::is_none")]
pub data_type: Option<String>,
}