basyx_rs/submodel_element/
submodel_element_list.rs

1// SPDX-FileCopyrightText: 2021 Fraunhofer Institute for Experimental Software Engineering IESE
2// SPDX-FileCopyrightText: 2023 Jan Hecht
3//
4// SPDX-License-Identifier: MIT
5
6use super::{EmbeddedDataSpecification, SubmodelElement};
7use crate::submodel_element::AasSubmodelElements;
8use crate::LangString as LangStringNameType;
9use crate::LangString as LangStringTextType;
10use crate::{qualifier::Qualifier, reference::Reference, DataTypeDefXsd, Extension};
11use serde::{Deserialize, Serialize};
12
13#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
14pub struct SubmodelElementList {
15    #[serde(skip_serializing_if = "Option::is_none")]
16    pub extensions: Option<Vec<Extension>>,
17
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub category: Option<String>,
20
21    #[serde(skip_serializing_if = "Option::is_none")]
22    #[serde(rename = "idShort")]
23    pub id_short: Option<String>,
24
25    #[serde(skip_serializing_if = "Option::is_none")]
26    #[serde(rename = "displayName")]
27    pub display_name: Option<Vec<LangStringNameType>>,
28
29    #[serde(skip_serializing_if = "Option::is_none")]
30    pub description: Option<Vec<LangStringTextType>>,
31
32    #[serde(skip_serializing_if = "Option::is_none")]
33    #[serde(rename = "semanticId")]
34    pub semantic_id: Option<Reference>,
35
36    #[serde(skip_serializing_if = "Option::is_none")]
37    #[serde(rename = "supplementalSemanticIds")]
38    pub supplemental_semantic_ids: Option<Vec<Reference>>,
39
40    #[serde(skip_serializing_if = "Option::is_none")]
41    pub qualifiers: Option<Vec<Qualifier>>,
42
43    #[serde(skip_serializing_if = "Option::is_none")]
44    #[serde(rename = "embeddedDataSpecifications")]
45    pub embedded_data_specifications: Option<Vec<EmbeddedDataSpecification>>,
46
47    // SubmodelElementList
48    #[serde(skip_serializing_if = "Option::is_none")]
49    #[serde(rename = "orderRelevant")]
50    pub order_relevant: Option<bool>,
51
52    #[serde(skip_serializing_if = "Option::is_none")]
53    #[serde(rename = "semanticIdListElement")]
54    pub semantic_id_list_element: Option<Reference>,
55
56    #[serde(rename = "typeValueListElement")]
57    pub type_value_list_element: AasSubmodelElements,
58
59    #[serde(skip_serializing_if = "Option::is_none")]
60    #[serde(rename = "valueTypeListElement")]
61    pub value_type_list_element: Option<DataTypeDefXsd>,
62
63    #[serde(skip_serializing_if = "Option::is_none")]
64    pub value: Option<Vec<SubmodelElement>>,
65}
66
67impl SubmodelElementList {
68    pub fn new(type_value_list_element: AasSubmodelElements) -> Self {
69        Self {
70            extensions: None,
71            category: None,
72            id_short: None,
73            display_name: None,
74            description: None,
75            semantic_id: None,
76            supplemental_semantic_ids: None,
77            qualifiers: None,
78            embedded_data_specifications: None,
79            order_relevant: None,
80            semantic_id_list_element: None,
81            type_value_list_element,
82            value_type_list_element: None,
83            value: None,
84        }
85    }
86
87    pub fn add_submodel_element(&mut self, element: SubmodelElement) {
88        if let Some(v) = self.value.as_mut() {
89            v.push(element);
90        } else {
91            self.value = Some(vec![element]);
92        }
93    }
94}