Skip to main content

opcua_server/node_manager/
monitored_items.rs

1use crate::MonitoredItemHandle;
2use opcua_types::{AttributeId, MonitoredItemModifyResult, NodeId, StatusCode};
3
4#[derive(Debug, Clone)]
5/// Reference to a monitored item in the server subscription cache.
6pub struct MonitoredItemRef {
7    handle: MonitoredItemHandle,
8    node_id: NodeId,
9    attribute: AttributeId,
10}
11
12impl MonitoredItemRef {
13    pub(crate) fn new(
14        handle: MonitoredItemHandle,
15        node_id: NodeId,
16        attribute: AttributeId,
17    ) -> Self {
18        Self {
19            handle,
20            node_id,
21            attribute,
22        }
23    }
24
25    /// Monitored item handle, uniquely identifies a monitored item.
26    pub fn handle(&self) -> MonitoredItemHandle {
27        self.handle
28    }
29
30    /// Node ID of the monitored item.
31    pub fn node_id(&self) -> &NodeId {
32        &self.node_id
33    }
34
35    /// Attribute ID of the monitored item.
36    pub fn attribute(&self) -> AttributeId {
37        self.attribute
38    }
39}
40
41#[derive(Debug, Clone)]
42/// Reference to a monitored item with information from an update operation.
43pub struct MonitoredItemUpdateRef {
44    handle: MonitoredItemHandle,
45    node_id: NodeId,
46    attribute: AttributeId,
47    update: MonitoredItemModifyResult,
48}
49
50impl MonitoredItemUpdateRef {
51    pub(crate) fn new(
52        handle: MonitoredItemHandle,
53        node_id: NodeId,
54        attribute: AttributeId,
55        update: MonitoredItemModifyResult,
56    ) -> Self {
57        Self {
58            handle,
59            node_id,
60            attribute,
61            update,
62        }
63    }
64
65    /// Monitored item handle, uniquely identifies a monitored item.
66    pub fn handle(&self) -> MonitoredItemHandle {
67        self.handle
68    }
69
70    /// Node ID of the monitored item.
71    pub fn node_id(&self) -> &NodeId {
72        &self.node_id
73    }
74
75    /// Attribute ID of the monitored item.
76    pub fn attribute(&self) -> AttributeId {
77        self.attribute
78    }
79
80    /// Result of the monitored item update.
81    pub fn update(&self) -> &MonitoredItemModifyResult {
82        &self.update
83    }
84
85    /// Status code of the update.
86    pub fn status_code(&self) -> StatusCode {
87        self.update.status_code
88    }
89
90    pub(crate) fn into_result(self) -> MonitoredItemModifyResult {
91        self.update
92    }
93}