Skip to main content

OpcProvider

Trait OpcProvider 

Source
pub trait OpcProvider: Send + Sync {
    // Required methods
    fn list_servers<'life0, 'life1, 'async_trait>(
        &'life0 self,
        host: &'life1 str,
    ) -> Pin<Box<dyn Future<Output = OpcResult<Vec<String>>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;
    fn browse_tags<'life0, 'life1, 'async_trait>(
        &'life0 self,
        server: &'life1 str,
        max_tags: usize,
        progress: Arc<AtomicUsize>,
        tags_sink: Arc<Mutex<Vec<String>>>,
    ) -> Pin<Box<dyn Future<Output = OpcResult<Vec<String>>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;
    fn read_tag_values<'life0, 'life1, 'async_trait>(
        &'life0 self,
        server: &'life1 str,
        tag_ids: Vec<String>,
    ) -> Pin<Box<dyn Future<Output = OpcResult<Vec<TagValue>>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait;
    fn write_tag_value<'life0, 'life1, 'life2, 'async_trait>(
        &'life0 self,
        server: &'life1 str,
        tag_id: &'life2 str,
        value: OpcValue,
    ) -> Pin<Box<dyn Future<Output = OpcResult<WriteResult>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait,
             'life2: 'async_trait;

    // Provided methods
    fn browse_capabilities<'life0, 'life1, 'async_trait>(
        &'life0 self,
        server: &'life1 str,
    ) -> Pin<Box<dyn Future<Output = OpcResult<BrowseCapabilities>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
    fn open_browse_session<'life0, 'life1, 'async_trait>(
        &'life0 self,
        server: &'life1 str,
    ) -> Pin<Box<dyn Future<Output = OpcResult<BrowseSessionToken>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
    fn browse_page<'life0, 'life1, 'async_trait>(
        &'life0 self,
        session: &'life1 BrowseSessionToken,
        request: BrowsePageRequest,
    ) -> Pin<Box<dyn Future<Output = OpcResult<BrowsePage>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
    fn close_browse_session<'life0, 'life1, 'async_trait>(
        &'life0 self,
        session: &'life1 BrowseSessionToken,
    ) -> Pin<Box<dyn Future<Output = OpcResult<()>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
    fn start_inventory<'life0, 'life1, 'async_trait>(
        &'life0 self,
        server: &'life1 str,
        options: InventoryOptions,
    ) -> Pin<Box<dyn Future<Output = OpcResult<InventoryStream>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
    fn read_tag_values_for_display<'life0, 'life1, 'async_trait>(
        &'life0 self,
        server: &'life1 str,
        tag_ids: Vec<String>,
    ) -> Pin<Box<dyn Future<Output = OpcResult<Vec<TagValue>>> + Send + 'async_trait>>
       where Self: 'async_trait,
             'life0: 'async_trait,
             'life1: 'async_trait { ... }
}
Expand description

Async trait for OPC DA operations.

This is the stable public API. Backend implementations provide the actual COM/DCOM interaction.

Required Methods§

Source

fn list_servers<'life0, 'life1, 'async_trait>( &'life0 self, host: &'life1 str, ) -> Pin<Box<dyn Future<Output = OpcResult<Vec<String>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

List available OPC DA servers on the given host.

§Errors

Returns Err if COM initialization fails or the server registry cannot be enumerated.

Source

fn browse_tags<'life0, 'life1, 'async_trait>( &'life0 self, server: &'life1 str, max_tags: usize, progress: Arc<AtomicUsize>, tags_sink: Arc<Mutex<Vec<String>>>, ) -> Pin<Box<dyn Future<Output = OpcResult<Vec<String>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Browse tags recursively, pushing discoveries to tags_sink.

§Errors

Returns Err if the server connection fails, the ProgID cannot be resolved, or the namespace walk encounters an unrecoverable error.

Source

fn read_tag_values<'life0, 'life1, 'async_trait>( &'life0 self, server: &'life1 str, tag_ids: Vec<String>, ) -> Pin<Box<dyn Future<Output = OpcResult<Vec<TagValue>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Read current values for the given tag IDs.

VT_BSTR values preserve their exact COM contents. No quote characters are added or removed, so this method is suitable for machine consumers.

§Errors

Returns Err if the server connection fails, no items can be added to the OPC group, or the synchronous read operation fails.

Source

fn write_tag_value<'life0, 'life1, 'life2, 'async_trait>( &'life0 self, server: &'life1 str, tag_id: &'life2 str, value: OpcValue, ) -> Pin<Box<dyn Future<Output = OpcResult<WriteResult>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait, 'life2: 'async_trait,

Write a value to a single OPC DA tag.

§Errors

Returns Err if the server connection fails, the tag cannot be added to the OPC group, or the synchronous write operation fails.

Provided Methods§

Source

fn browse_capabilities<'life0, 'life1, 'async_trait>( &'life0 self, server: &'life1 str, ) -> Pin<Box<dyn Future<Output = OpcResult<BrowseCapabilities>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Return the native browse capabilities of an OPC DA server.

§Errors

Returns Err if the server cannot be connected or exposes no supported OPC DA browse interface.

Source

fn open_browse_session<'life0, 'life1, 'async_trait>( &'life0 self, server: &'life1 str, ) -> Pin<Box<dyn Future<Output = OpcResult<BrowseSessionToken>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Open an isolated native browse session with its own server connection.

§Errors

Returns Err if the server cannot be connected, browsing is unsupported, or the worker’s bounded session capacity has been reached.

Source

fn browse_page<'life0, 'life1, 'async_trait>( &'life0 self, session: &'life1 BrowseSessionToken, request: BrowsePageRequest, ) -> Pin<Box<dyn Future<Output = OpcResult<BrowsePage>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Browse one bounded level of an open native browse session.

§Errors

Returns Err for invalid, closed, or expired tokens; invalid page sizes; unsupported requests; or underlying OPC browse failures.

Source

fn close_browse_session<'life0, 'life1, 'async_trait>( &'life0 self, session: &'life1 BrowseSessionToken, ) -> Pin<Box<dyn Future<Output = OpcResult<()>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Explicitly close a native browse session and release its server connection.

§Errors

Returns Err if the session token is invalid, expired, or already closed.

Source

fn start_inventory<'life0, 'life1, 'async_trait>( &'life0 self, server: &'life1 str, options: InventoryOptions, ) -> Pin<Box<dyn Future<Output = OpcResult<InventoryStream>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Start a cancellable, bounded namespace inventory on a separate connection from foreground operations.

The returned stream never exposes interactive browse-session tokens; all traversal state remains private to the inventory worker.

Source

fn read_tag_values_for_display<'life0, 'life1, 'async_trait>( &'life0 self, server: &'life1 str, tag_ids: Vec<String>, ) -> Pin<Box<dyn Future<Output = OpcResult<Vec<TagValue>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Read current values formatted for human-readable display.

The native provider wraps VT_BSTR contents in quote characters while leaving all other value formatting unchanged. The default implementation delegates to Self::read_tag_values so third-party providers remain source-compatible.

§Errors

Returns the same errors as Self::read_tag_values.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§

Source§

impl OpcProvider for MockOpcProvider

Async trait for OPC DA operations.

This is the stable public API. Backend implementations provide the actual COM/DCOM interaction.

Source§

impl<C: ServerConnector + 'static> OpcProvider for OpcDaClient<C>