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§
Sourcefn 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 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.
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.
Sourcefn 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 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.
Sourcefn 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,
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§
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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 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.
Sourcefn 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,
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§
impl OpcProvider for MockOpcProvider
Async trait for OPC DA operations.
This is the stable public API. Backend implementations provide the actual COM/DCOM interaction.