basyx_rs/submodel_element/
operation.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::OperationVariable;
8use crate::LangString as LangStringNameType;
9use crate::LangString as LangStringTextType;
10use crate::{reference::Reference, Extension, Qualifier};
11use serde::{Deserialize, Serialize};
12
13#[derive(Clone, PartialEq, Debug, Deserialize, Serialize)]
14pub struct Operation {
15    // Referable
16    // HasExtension
17    #[serde(skip_serializing_if = "Option::is_none")]
18    pub extensions: Option<Vec<Extension>>,
19
20    #[serde(skip_serializing_if = "Option::is_none")]
21    pub category: Option<String>,
22
23    #[serde(skip_serializing_if = "Option::is_none")]
24    #[serde(rename = "idShort")]
25    pub id_short: Option<String>,
26
27    #[serde(skip_serializing_if = "Option::is_none")]
28    #[serde(rename = "displayName")]
29    pub display_name: Option<Vec<LangStringNameType>>,
30
31    #[serde(skip_serializing_if = "Option::is_none")]
32    pub description: Option<Vec<LangStringTextType>>,
33
34    // HasSemantics
35    #[serde(skip_serializing_if = "Option::is_none")]
36    #[serde(rename = "semanticId")]
37    pub semantic_id: Option<Reference>,
38
39    #[serde(skip_serializing_if = "Option::is_none")]
40    #[serde(rename = "supplementalSemanticIds")]
41    pub supplemental_semantic_ids: Option<Vec<Reference>>,
42
43    // Qualifiable
44    #[serde(skip_serializing_if = "Option::is_none")]
45    pub qualifiers: Option<Vec<Qualifier>>,
46
47    // HasDataSpecification
48    #[serde(skip_serializing_if = "Option::is_none")]
49    #[serde(rename = "embeddedDataSpecifications")]
50    pub embedded_data_specifications: Option<Vec<EmbeddedDataSpecification>>,
51
52    // SME Operation
53    #[serde(skip_serializing_if = "Option::is_none")]
54    #[serde(rename = "inputVariables")]
55    pub input_variables: Option<Vec<OperationVariable>>,
56
57    #[serde(skip_serializing_if = "Option::is_none")]
58    #[serde(rename = "outputVariables")]
59    pub output_variables: Option<Vec<OperationVariable>>,
60
61    #[serde(skip_serializing_if = "Option::is_none")]
62    #[serde(rename = "inoutputVariables")]
63    pub inoutput_variables: Option<Vec<OperationVariable>>,
64}
65
66impl Operation {
67    pub fn new() -> Self {
68        Self {
69            extensions: None,
70            category: None,
71            id_short: None,
72            display_name: None,
73            description: None,
74            semantic_id: None,
75            supplemental_semantic_ids: None,
76            qualifiers: None,
77            embedded_data_specifications: None,
78            input_variables: None,
79            output_variables: None,
80            inoutput_variables: None,
81        }
82    }
83}
84
85impl Default for Operation {
86    fn default() -> Self {
87        Operation::new()
88    }
89}