basyx_rs/submodel_element/
entity.rs

1// SPDX-FileCopyrightText: 2023 Jan Hecht
2//
3// SPDX-License-Identifier: MIT
4
5use crate::submodel_element::{EntityType, SubmodelElement};
6use crate::LangString as LangStringNameType;
7use crate::LangString as LangStringTextType;
8use crate::{EmbeddedDataSpecification, Extension, Qualifier, Reference, SpecificAssetId};
9use serde::{Deserialize, Serialize};
10
11#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
12pub struct Entity {
13    // Referable
14    // HasExtension
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    // HasSemantics
33    #[serde(skip_serializing_if = "Option::is_none")]
34    #[serde(rename = "semanticId")]
35    pub semantic_id: Option<Reference>,
36
37    #[serde(skip_serializing_if = "Option::is_none")]
38    #[serde(rename = "supplementalSemanticIds")]
39    pub supplemental_semantic_ids: Option<Vec<Reference>>,
40
41    // Qualifiable
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub qualifiers: Option<Vec<Qualifier>>,
44
45    // HasDataSpecification
46    #[serde(skip_serializing_if = "Option::is_none")]
47    #[serde(rename = "embeddedDataSpecifications")]
48    pub embedded_data_specifications: Option<Vec<EmbeddedDataSpecification>>,
49
50    #[serde(skip_serializing_if = "Option::is_none")]
51    pub statements: Option<Vec<SubmodelElement>>,
52
53    #[serde(rename = "entityType")]
54    pub entity_type: EntityType,
55
56    #[serde(skip_serializing_if = "Option::is_none")]
57    #[serde(rename = "globalAssetId")]
58    pub global_asset_id: Option<String>,
59
60    #[serde(skip_serializing_if = "Option::is_none")]
61    #[serde(rename = "specificAssetIds")]
62    pub specific_asset_ids: Option<Vec<SpecificAssetId>>,
63}
64
65impl Entity {
66    pub fn new(entity_type: EntityType) -> Self {
67        Self {
68            extensions: None,
69            category: None,
70            id_short: None,
71            display_name: None,
72            description: None,
73            semantic_id: None,
74            supplemental_semantic_ids: None,
75            qualifiers: None,
76            embedded_data_specifications: None,
77            statements: None,
78            entity_type,
79            global_asset_id: None,
80            specific_asset_ids: None,
81        }
82    }
83}