opcua_server/node_manager/utils/
opaque_node_id.rs1use opcua_types::{ByteString, Identifier, NodeId};
4use serde::{de::DeserializeOwned, Serialize};
5
6pub fn as_opaque_node_id<T: Serialize>(value: &T, namespace: u16) -> Option<NodeId> {
9 let v = postcard::to_stdvec(&value).ok()?;
10 Some(NodeId {
11 namespace,
12 identifier: Identifier::ByteString(ByteString { value: Some(v) }),
13 })
14}
15
16pub fn from_opaque_node_id<T: DeserializeOwned>(id: &NodeId) -> Option<T> {
18 let v = match &id.identifier {
19 Identifier::ByteString(b) => b.value.as_ref()?,
20 _ => return None,
21 };
22 postcard::from_bytes(v).ok()
23}