DynamicStructure

Struct DynamicStructure 

Source
pub struct DynamicStructure { /* private fields */ }
Expand description

A type representing an OPC-UA structure decoded dynamically. This can use runtime information to properly encode and decode binary information. In order to make the type encodable, it contains references to a StructTypeInfo describing the type it contains, as well as the DataTypeTree containing any types it references.

This type can be used to reason about data on a server without explicitly defining the server types in code, which is useful if you want to create a generic client that can work with data from any server.

Internally it is simply an array of Variant.

Note that this type is intended to support all encoding/decoding types in the OPC-UA standard, which is more than what the encoding macros currently do. This includes structurs with optional fields, unions, and multi-dimensional arrays, none of which are used in the core types.

Implementations§

Source§

impl DynamicStructure

Source

pub fn new_struct( type_def: Arc<StructTypeInfo>, type_tree: Arc<DataTypeTree>, data: Vec<Variant>, ) -> Result<Self, Error>

Create a new struct, validating that it matches the provided type definition.

Source

pub fn new_union( type_def: Arc<StructTypeInfo>, type_tree: Arc<DataTypeTree>, data: Variant, discriminant: u32, ) -> Result<Self, Error>

Create a new union, validating that it matches the provided type definition.

Source

pub fn new_null_union( type_def: Arc<StructTypeInfo>, type_tree: Arc<DataTypeTree>, ) -> Self

Create a new union, with value null.

Source

pub fn values(&self) -> &[Variant]

Get a reference to the fields in order.

Source

pub fn get_field(&self, index: usize) -> Option<&Variant>

Get a reference to the field at index

Source

pub fn get_field_by_name(&self, name: &str) -> Option<&Variant>

Get a reference to the field with the given name.

Trait Implementations§

Source§

impl BinaryEncodable for DynamicStructure

Source§

fn byte_len(&self, ctx: &Context<'_>) -> usize

Returns the exact byte length of the structure as it would be if encode were called. This may be called prior to writing to ensure the correct amount of space is available.
Source§

fn encode<S: Write + ?Sized>( &self, stream: &mut S, ctx: &Context<'_>, ) -> EncodingResult<()>

Encodes the instance to the write stream.
Source§

fn override_encoding(&self) -> Option<BuiltInDataEncoding>

Override the extension object encoding used for this type. This only makes sense if the type can only ever be encoded using a single built-in encoding.
Source§

fn encode_to_vec(&self, ctx: &Context<'_>) -> Vec<u8>

Convenience method for encoding a message straight into an array of bytes. It is preferable to reuse buffers than to call this so it should be reserved for tests and trivial code.
Source§

impl Clone for DynamicStructure

Source§

fn clone(&self) -> DynamicStructure

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for DynamicStructure

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl ExpandedMessageInfo for DynamicStructure

Source§

fn full_json_type_id(&self) -> ExpandedNodeId

The JSON type id associated with the message.
Source§

fn full_type_id(&self) -> ExpandedNodeId

The binary type id associated with the message.
Source§

fn full_xml_type_id(&self) -> ExpandedNodeId

The XML type id associated with the message.
Source§

fn full_data_type_id(&self) -> ExpandedNodeId

The data type ID associated with the message.
Source§

impl JsonEncodable for DynamicStructure

Source§

fn encode( &self, stream: &mut JsonStreamWriter<&mut dyn Write>, ctx: &Context<'_>, ) -> EncodingResult<()>

Write the type to the provided JSON writer.
Source§

impl PartialEq for DynamicStructure

Source§

fn eq(&self, other: &Self) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl UaNullable for DynamicStructure

Source§

fn is_ua_null(&self) -> bool

Return true if this value is null, meaning it can be left out when being encoded in JSON and XML encodings.
Source§

impl XmlEncodable for DynamicStructure

Source§

fn encode( &self, stream: &mut XmlStreamWriter<&mut dyn Write>, ctx: &Context<'_>, ) -> EncodingResult<()>

Encode a value to an XML stream.
Source§

impl XmlType for DynamicStructure

Source§

const TAG: &'static str = "Unknown"

The static fallback tag for this type. Convenience feature, but also used in nested types.
Source§

fn tag(&self) -> &str

The XML tag name for this type.

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> DynEncodable for T

Source§

fn encode_binary( &self, stream: &mut dyn Write, ctx: &Context<'_>, ) -> Result<(), Error>

Encode the struct using OPC-UA binary encoding.
Source§

fn encode_json( &self, stream: &mut JsonStreamWriter<&mut dyn Write>, ctx: &Context<'_>, ) -> Result<(), Error>

Encode the struct using reversible OPC-UA JSON encoding.
Source§

fn encode_xml( &self, stream: &mut XmlStreamWriter<&mut dyn Write>, ctx: &Context<'_>, ) -> Result<(), Error>

Encode the struct using OPC-UA XML encoding.
Source§

fn xml_tag_name(&self) -> &str

The XML tag name for this struct.
Source§

fn byte_len_dyn(&self, ctx: &Context<'_>) -> usize

Get the binary byte length of this struct.
Source§

fn binary_type_id(&self) -> ExpandedNodeId

Get the binary encoding ID of this struct.
Source§

fn json_type_id(&self) -> ExpandedNodeId

Get the JSON encoding ID of this struct.
Source§

fn xml_type_id(&self) -> ExpandedNodeId

Get the XML encoding ID of this struct.
Source§

fn data_type_id(&self) -> ExpandedNodeId

Get the data type ID of this struct.
Source§

fn as_dyn_any(self: Box<T>) -> Box<dyn Any + Sync + Send>

Method to cast this to a dyn Any box, required for downcasting.
Source§

fn as_dyn_any_ref(&self) -> &(dyn Any + Sync + Send + 'static)

Method to cast this to a dyn Any trait object, required for downcasting by reference.
Source§

fn clone_box(&self) -> Box<dyn DynEncodable>

Clone this to a dyn box. Required in order to implement Clone for ExtensionObject.
Source§

fn dyn_eq(&self, other: &(dyn DynEncodable + 'static)) -> bool

Compare this with dynamic object. Invokes the PartialEq implementation of self and other, if other has type Self.
Source§

fn type_name(&self) -> &'static str

Get the type name of the type, by calling std::any::type_name on Self. Very useful for debugging.
Source§

fn override_encoding(&self) -> Option<BuiltInDataEncoding>

Override the extension object encoding used for this type. This only makes sense if the type can only ever be encoded using a single built-in encoding.
Source§

impl<T> EventField for T
where T: IntoVariant + Clone,

Source§

fn get_value( &self, attribute_id: AttributeId, index_range: &NumericRange, remaining_path: &[QualifiedName], ) -> Variant

Get the variant representation of this field, using the given index range. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoVariant for T
where T: DynEncodable,

Source§

fn into_variant(self) -> Variant

Convert self into a variant.
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T> TryFromVariant for T
where T: DynEncodable,

Source§

fn try_from_variant(v: Variant) -> Result<T, Error>

Try to cast the given variant to this type.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> VariantType for T
where T: DynEncodable,

Source§

fn variant_type_id() -> VariantScalarTypeId

The variant kind this type will be represented as.
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more