basyx_rs/submodel_element/
submodel_element_collection.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::LangString as LangStringNameType;
8use crate::LangString as LangStringTextType;
9use crate::{qualifier::Qualifier, reference::Reference, Extension};
10use serde::{Deserialize, Serialize};
11
12#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
13pub struct SubmodelElementCollection {
14    #[serde(skip_serializing_if = "Option::is_none")]
15    pub extensions: Option<Vec<Extension>>,
16
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub category: Option<String>,
19
20    #[serde(skip_serializing_if = "Option::is_none")]
21    #[serde(rename = "idShort")]
22    pub id_short: Option<String>,
23
24    #[serde(skip_serializing_if = "Option::is_none")]
25    #[serde(rename = "displayName")]
26    pub display_name: Option<Vec<LangStringNameType>>,
27
28    #[serde(skip_serializing_if = "Option::is_none")]
29    pub description: Option<Vec<LangStringTextType>>,
30
31    #[serde(skip_serializing_if = "Option::is_none")]
32    #[serde(rename = "semanticId")]
33    pub semantic_id: Option<Reference>,
34
35    #[serde(skip_serializing_if = "Option::is_none")]
36    #[serde(rename = "supplementalSemanticIds")]
37    pub supplemental_semantic_ids: Option<Vec<Reference>>,
38
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub qualifiers: Option<Vec<Qualifier>>,
41
42    #[serde(skip_serializing_if = "Option::is_none")]
43    #[serde(rename = "embeddedDataSpecifications")]
44    pub embedded_data_specifications: Option<Vec<EmbeddedDataSpecification>>,
45
46    #[serde(skip_serializing_if = "Option::is_none")]
47    pub value: Option<Vec<SubmodelElement>>,
48}
49
50impl SubmodelElementCollection {
51    pub fn new() -> Self {
52        Self {
53            extensions: None,
54            category: None,
55            id_short: None,
56            display_name: None,
57            description: None,
58            semantic_id: None,
59            supplemental_semantic_ids: None,
60            qualifiers: None,
61            embedded_data_specifications: None,
62            value: None,
63        }
64    }
65
66    pub fn add_submodel_element(&mut self, element: SubmodelElement) {
67        if let Some(v) = self.value.as_mut() {
68            v.push(element);
69        } else {
70            self.value = Some(vec![element]);
71        }
72    }
73}
74
75impl Default for SubmodelElementCollection {
76    fn default() -> Self {
77        Self::new()
78    }
79}