Skip to main content

OpcDaDriver

Struct OpcDaDriver 

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

The primary Driver for v1: reads, writes, and browses OPC DA tags through an opcda-bridge gateway’s gRPC API.

Holds its opcda_bridge::Client behind a tokio::sync::Mutex because the client’s own methods take &mut self (it buffers per-call gRPC codec state) while Driver’s methods take &self (required so a driver can be shared behind Arc<dyn Driver>) — serializing calls through the one connection is a reasonable tradeoff, since a single tuning session only ever has one read/write/browse in flight at a time, and the underlying HTTP/2 channel stays cheaply multiplexed regardless of how many logical callers there are.

Implementations§

Source§

impl OpcDaDriver

Source

pub async fn connect( host: &str, server: impl Into<String>, ) -> DriverResult<Self>

Connects to an opcda-bridge gateway at host (e.g. "localhost:7600") and binds to server — the OPC DA server’s ProgID (e.g. "Matrikon.OPC.Simulation.1") that every subsequent read/write/browse call is scoped to.

Source

pub async fn capabilities(&self) -> DriverResult<DriverCapabilities>

Reports the bridge and OPC server’s browse/search capabilities.

Source

pub async fn browse_page( &self, request: BrowsePageRequest, ) -> DriverResult<BrowsePage>

Requests one bounded browse page without following its continuation token.

Source

pub async fn search_stream( &self, request: SearchRequest, ) -> DriverResult<DriverSearchStream>

Starts a progressive namespace search. Dropping the returned stream cancels the search.

Source

pub async fn search_events( &self, request: SearchRequest, ) -> DriverResult<Vec<SearchEvent>>

Collects a complete search stream for callers that do not need progressive delivery.

Source

pub async fn search_index_status(&self) -> DriverResult<SearchIndexStatus>

Returns the gateway-owned persistent namespace-index status for this OPC server.

Source

pub async fn set_search_index_auto_refresh( &self, enabled: bool, ) -> DriverResult<SearchIndexStatus>

Enables or disables future automatic refreshes for this OPC server’s index.

Source

pub async fn delete_search_index(&self) -> DriverResult<SearchIndexStatus>

Deletes this OPC server’s persistent namespace index and enrollment.

Source

pub async fn refresh_search_index( &self, force: bool, ) -> DriverResult<SearchIndexStatus>

Starts or coalesces a persistent namespace-index refresh for this OPC server.

Source

pub async fn control_search_index( &self, action: SearchIndexControlAction, ) -> DriverResult<SearchIndexStatus>

Pauses, resumes, or cancels a persistent namespace-index build.

Source

pub async fn search_index_query( &self, request: SearchIndexRequest, ) -> DriverResult<SearchIndexResponse>

Queries the gateway-owned persistent namespace index without falling back to live namespace traversal.

Trait Implementations§

Source§

impl Debug for OpcDaDriver

Source§

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

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

impl Driver for OpcDaDriver

Source§

fn read<'life0, 'life1, 'async_trait>( &'life0 self, tags: &'life1 [TagId], ) -> Pin<Box<dyn Future<Output = DriverResult<Vec<TagValue>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Reads the current value of every tag in tags, in one batched call where the driver supports it (a single OPC DA Read RPC for all of them, rather than one round trip per tag). Returns exactly one TagValue per requested tag, in the same order as tags. Read more
Source§

fn write<'life0, 'life1, 'async_trait>( &'life0 self, tag: &'life1 TagId, value: TagWrite, ) -> Pin<Box<dyn Future<Output = DriverResult<WriteOutcome>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait, 'life1: 'async_trait,

Writes value to tag. Read more
Source§

fn capabilities<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = DriverResult<DriverCapabilities>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Reports the namespace capabilities of this driver/server pair.
Source§

fn browse<'life0, 'async_trait>( &'life0 self, request: BrowsePageRequest, ) -> Pin<Box<dyn Future<Output = DriverResult<BrowsePage>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Lists one bounded page of immediate children. Navigation uses opaque session, node, and continuation values returned by the driver; callers must not infer hierarchy by parsing punctuation in an ItemID.
Source§

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

Releases a server-side browse session.
Source§

fn search<'life0, 'async_trait>( &'life0 self, request: SearchRequest, ) -> Pin<Box<dyn Future<Output = DriverResult<Vec<SearchEvent>>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Collects a bounded namespace search. Drivers that support progressive search may expose a richer stream through their concrete type; this method is the portable trait surface.
Source§

fn search_index_status<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = DriverResult<SearchIndexStatus>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Reports the gateway-owned persistent namespace-index status.
Source§

fn refresh_search_index<'life0, 'async_trait>( &'life0 self, force: bool, ) -> Pin<Box<dyn Future<Output = DriverResult<SearchIndexStatus>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Starts or coalesces a persistent namespace-index refresh.
Source§

fn control_search_index<'life0, 'async_trait>( &'life0 self, action: SearchIndexControlAction, ) -> Pin<Box<dyn Future<Output = DriverResult<SearchIndexStatus>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Pauses, resumes, or cancels a persistent namespace-index build.
Source§

fn set_search_index_auto_refresh<'life0, 'async_trait>( &'life0 self, enabled: bool, ) -> Pin<Box<dyn Future<Output = DriverResult<SearchIndexStatus>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Enables or disables future automatic refreshes for this server’s index.
Source§

fn delete_search_index<'life0, 'async_trait>( &'life0 self, ) -> Pin<Box<dyn Future<Output = DriverResult<SearchIndexStatus>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Deletes this server’s persistent namespace index and enrollment.
Source§

fn search_index<'life0, 'async_trait>( &'life0 self, request: SearchIndexRequest, ) -> Pin<Box<dyn Future<Output = DriverResult<SearchIndexResponse>> + Send + 'async_trait>>
where Self: 'async_trait, 'life0: 'async_trait,

Queries the gateway-owned persistent namespace index.

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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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.

§

impl<T> IntoRequest<T> for T

§

fn into_request(self) -> Request<T>

Wrap the input message T in a tonic::Request
§

impl<L> LayerExt<L> for L

§

fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>
where L: Layer<S>,

Applies the layer to a service and wraps it in [Layered].
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.
§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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