basyx_rs/submodel_element/
basic_event_element.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;
7use crate::submodel_element::direction::Direction;
8use crate::submodel_element::state_of_event::StateOfEvent;
9use crate::LangString as LangStringNameType;
10use crate::LangString as LangStringTextType;
11use crate::{qualifier::Qualifier, reference::Reference, Extension};
12use serde::{Deserialize, Serialize};
13
14#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
15pub struct BasicEventElement {
16    // Referable
17    // HasExtension
18    #[serde(skip_serializing_if = "Option::is_none")]
19    pub extensions: Option<Vec<Extension>>,
20
21    #[serde(skip_serializing_if = "Option::is_none")]
22    pub category: Option<String>,
23
24    #[serde(skip_serializing_if = "Option::is_none")]
25    #[serde(rename = "idShort")]
26    pub id_short: Option<String>,
27
28    #[serde(skip_serializing_if = "Option::is_none")]
29    #[serde(rename = "displayName")]
30    pub display_name: Option<Vec<LangStringNameType>>,
31
32    #[serde(skip_serializing_if = "Option::is_none")]
33    pub description: Option<Vec<LangStringTextType>>,
34
35    // HasSemantics
36    #[serde(skip_serializing_if = "Option::is_none")]
37    #[serde(rename = "semanticId")]
38    pub semantic_id: Option<Reference>,
39
40    #[serde(skip_serializing_if = "Option::is_none")]
41    #[serde(rename = "supplementalSemanticIds")]
42    pub supplemental_semantic_ids: Option<Vec<Reference>>,
43
44    // Qualifiable
45    #[serde(skip_serializing_if = "Option::is_none")]
46    pub qualifiers: Option<Vec<Qualifier>>,
47
48    // HasDataSpecification
49    #[serde(skip_serializing_if = "Option::is_none")]
50    #[serde(rename = "embeddedDataSpecifications")]
51    pub embedded_data_specifications: Option<Vec<EmbeddedDataSpecification>>,
52
53    pub observed: Reference,
54
55    pub direction: Direction,
56
57    pub state: StateOfEvent,
58
59    #[serde(skip_serializing_if = "Option::is_none")]
60    #[serde(rename = "messageTopic")]
61    pub message_topic: Option<String>,
62
63    #[serde(skip_serializing_if = "Option::is_none")]
64    #[serde(rename = "messageBroker")]
65    pub message_broker: Option<Reference>,
66
67    #[serde(skip_serializing_if = "Option::is_none")]
68    #[serde(rename = "lastUpdate")]
69    pub last_update: Option<String>,
70
71    #[serde(skip_serializing_if = "Option::is_none")]
72    #[serde(rename = "minInterval")]
73    pub min_interval: Option<String>,
74
75    #[serde(skip_serializing_if = "Option::is_none")]
76    #[serde(rename = "maxInterval")]
77    pub max_interval: Option<String>,
78}
79
80impl BasicEventElement {
81    pub fn new(observed: Reference, direction: Direction, state: StateOfEvent) -> Self {
82        Self {
83            extensions: None,
84            category: None,
85            id_short: None,
86            display_name: None,
87            description: None,
88            semantic_id: None,
89            supplemental_semantic_ids: None,
90            qualifiers: None,
91            embedded_data_specifications: None,
92            observed,
93            direction,
94            state,
95            message_topic: None,
96            message_broker: None,
97            last_update: None,
98            min_interval: None,
99            max_interval: None,
100        }
101    }
102}