ExtensionObject

Struct ExtensionObject 

Source
pub struct ExtensionObject {
    pub body: Option<Box<dyn DynEncodable>>,
}
Expand description

An extension object holds an OPC-UA structure deserialize to a DynEncodable. This makes it possible to deserialize an extension object, the serialize it back in a different format, without reflecting over or inspecting the inner type.

Note that in order for a type to be deserialized into an ExtensionObject, the crate::Context given during deserialization needs to contain a crate::TypeLoader that can handle the type.

Fields§

§body: Option<Box<dyn DynEncodable>>

The raw extension object body.

Implementations§

Source§

impl ExtensionObject

Source

pub fn new<T>(encodable: T) -> ExtensionObject
where T: DynEncodable,

Create an extension object from a structure.

Source

pub fn null() -> ExtensionObject

Creates a null extension object, i.e. one with no value or payload

Source

pub fn is_null(&self) -> bool

Tests for an empty extension object.

Source

pub fn binary_type_id(&self) -> ExpandedNodeId

Get the binary type ID of the inner type.

Source

pub fn object_id(&self) -> Result<ObjectId, ExtensionObjectError>

Returns the object id of the thing this extension object contains, assuming the object id can be recognised from the node id.

Source

pub fn from_message<T>(encodable: T) -> ExtensionObject
where T: DynEncodable,

Create an extension object from a structure.

Source

pub fn into_inner_as<T: Send + Sync + 'static>(self) -> Option<Box<T>>

Consume the extension object and return the inner value downcast to T, if the inner type is present and is an instance of T.

You can use match_extension_object_owned for conveniently casting to one or more expected types.

Source

pub fn inner_as<T: Send + Sync + 'static>(&self) -> Option<&T>

Return the inner value by reference downcast to T, if the inner type is present and is an instance of T.

You can use match_extension_object for conveniently casting to one or more expected types.

Source

pub fn type_id(&self) -> Option<TypeId>

Get the rust std::any::TypeId of the inner type, if the extension object is not null.

Source

pub fn inner_is<T: 'static>(&self) -> bool

Return true if the inner value is an instance of T

Source

pub fn type_name(&self) -> Option<&'static str>

Get the name of the Rust type stored in the extension object, unless it is empty.

Source

pub fn data_type(&self) -> Option<ExpandedNodeId>

Get the full data type ID of the inner type. Note that for custom types this will not be resolved, so you need to call ExpandedNodeId::try_resolve to get the actual NodeId.

Trait Implementations§

Source§

impl BinaryDecodable for ExtensionObject

Source§

fn decode<S: Read + ?Sized>( stream: &mut S, ctx: &Context<'_>, ) -> EncodingResult<Self>

Decodes an instance from the read stream. The decoding options contains restrictions set by the server / client on the length of strings, arrays etc. If these limits are exceeded the implementation should return with a BadDecodingError as soon as possible.
Source§

impl BinaryEncodable for ExtensionObject

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 ExtensionObject

Source§

fn clone(&self) -> Self

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 ExtensionObject

Source§

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

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

impl Default for ExtensionObject

Source§

fn default() -> Self

Returns the “default value” for a type. Read more
Source§

impl From<&Operand> for ExtensionObject

Source§

fn from(v: &Operand) -> Self

Converts to this type from the input type.
Source§

impl From<Operand> for ExtensionObject

Source§

fn from(v: Operand) -> Self

Converts to this type from the input type.
Source§

impl IntoVariant for ExtensionObject

Source§

fn into_variant(self) -> Variant

Convert self into a variant.
Source§

impl JsonDecodable for ExtensionObject

Source§

fn decode( stream: &mut JsonStreamReader<&mut dyn Read>, ctx: &Context<'_>, ) -> EncodingResult<Self>

Decode Self from a JSON stream.
Source§

impl JsonEncodable for ExtensionObject

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 ExtensionObject

Source§

fn eq(&self, other: &ExtensionObject) -> 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 TryFrom<ExtensionObject> for Operand

Source§

type Error = StatusCode

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

fn try_from(v: ExtensionObject) -> Result<Self, Self::Error>

Performs the conversion.
Source§

impl TryFromVariant for ExtensionObject

Source§

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

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

impl UaNullable for ExtensionObject

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 VariantType for ExtensionObject

Source§

fn variant_type_id() -> VariantScalarTypeId

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

impl XmlDecodable for ExtensionObject

Source§

fn decode( read: &mut XmlStreamReader<&mut dyn Read>, ctx: &Context<'_>, ) -> Result<Self, Error>

Decode a value from an XML stream.
Source§

impl XmlEncodable for ExtensionObject

Source§

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

Encode a value to an XML stream.
Source§

impl XmlType for ExtensionObject

Source§

const TAG: &'static str = "ExtensionObject"

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.
Source§

impl StructuralPartialEq for ExtensionObject

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> 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> 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, 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> 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