opcua_types/
data_type_definition.rs1use crate::match_extension_object_owned;
4
5use super::{EnumDefinition, ExtensionObject, StatusCode, StructureDefinition, Variant};
6
7#[derive(Debug, Clone)]
8pub enum DataTypeDefinition {
10 Structure(StructureDefinition),
12 Enum(EnumDefinition),
14}
15
16impl From<StructureDefinition> for DataTypeDefinition {
17 fn from(value: StructureDefinition) -> Self {
18 Self::Structure(value)
19 }
20}
21
22impl From<EnumDefinition> for DataTypeDefinition {
23 fn from(value: EnumDefinition) -> Self {
24 Self::Enum(value)
25 }
26}
27
28impl DataTypeDefinition {
29 pub fn from_extension_object(obj: ExtensionObject) -> Result<Self, StatusCode> {
31 match_extension_object_owned!(obj,
32 v: StructureDefinition => Ok(Self::Structure(v)),
33 v: EnumDefinition => Ok(Self::Enum(v)),
34 _ => Err(StatusCode::BadDataTypeIdUnknown)
35 )
36 }
37
38 pub fn into_extension_object(self) -> ExtensionObject {
40 match self {
41 DataTypeDefinition::Structure(s) => ExtensionObject::from_message(s),
42 DataTypeDefinition::Enum(s) => ExtensionObject::from_message(s),
43 }
44 }
45}
46
47impl From<DataTypeDefinition> for Variant {
48 fn from(value: DataTypeDefinition) -> Self {
49 value.into_extension_object().into()
50 }
51}