Skip to main content

opcua_server/node_manager/utils/
opaque_node_id.rs

1//! Utils for working with opaque node IDs containing binary encoded data.
2
3use opcua_types::{ByteString, Identifier, NodeId};
4use serde::{de::DeserializeOwned, Serialize};
5
6/// Convert some value that implements [Serialize] to a bytestring node ID, using
7/// `postcard` binary encoding.
8pub 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
16/// Deserialize some node ID that was originally created using [as_opaque_node_id].
17pub 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}