Skip to main content

PvaClient

Struct PvaClient 

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

High-level PVAccess client.

Provides pvget, pvput, pvmonitor, and pvinfo methods that hide the underlying protocol handshake.

let client = PvaClient::builder().build();
let val = client.pvget("MY:PV").await?;

Implementations§

Source§

impl PvaClient

Source

pub fn builder() -> PvaClientBuilder

Create a builder for configuring a PvaClient.

Source

pub async fn pvget(&self, pv_name: &str) -> Result<PvGetResult, PvGetError>

Fetch the current value of a PV.

Source

pub async fn pvget_fields( &self, pv_name: &str, fields: &[&str], ) -> Result<PvGetResult, PvGetError>

Fetch a PV with field filtering (equivalent to pvget -r "field(value,alarm)").

Source

pub async fn pvput( &self, pv_name: &str, value: impl Into<Value>, ) -> Result<(), PvGetError>

Write a value to a PV.

Accepts anything convertible to serde_json::Value:

client.pvput("MY:PV", 42.0).await?;
client.pvput("MY:PV", "hello").await?;
client.pvput("MY:PV", serde_json::json!({"value": 1.5})).await?;
Source

pub async fn pvput_fields( &self, pv_name: &str, value: impl Into<Value>, fields: &[&str], ) -> Result<(), PvGetError>

Write to a PV with explicit field selection (dotted paths).

fields is forwarded as the PUT pvRequest. An empty slice is treated as “all fields” (server returns full descriptor on INIT).

Source

pub async fn open_put_channel( &self, pv_name: &str, ) -> Result<PvaChannel, PvGetError>

Open a persistent channel for high-rate PUT streaming.

Resolves the PV, establishes a channel, and completes the PUT INIT handshake. The returned PvaChannel is ready for immediate put calls.

Source

pub async fn open_put_channel_fields( &self, pv_name: &str, fields: &[&str], ) -> Result<PvaChannel, PvGetError>

Open a persistent PUT channel with explicit field selection.

An empty fields slice requests all fields from the server.

Source

pub async fn pvmonitor<F>( &self, pv_name: &str, callback: F, ) -> Result<(), PvGetError>

Subscribe to a PV and receive live updates via a callback.

The callback returns ControlFlow::Continue to keep listening or ControlFlow::Break to stop the subscription.

use std::ops::ControlFlow;

client.pvmonitor("MY:PV", |value| {
    println!("{value:?}");
    ControlFlow::Continue(())
}).await?;
Source

pub async fn pvmonitor_fields<F>( &self, pv_name: &str, fields: &[&str], callback: F, ) -> Result<(), PvGetError>

Subscribe to a PV with explicit field selection (dotted paths).

fields is the MONITOR pvRequest. Each entry may be a top-level field ("value") or a dotted nested path ("alarm.severity"). An empty slice requests all fields.

Source

pub async fn pvmonitor_with_options<F>( &self, pv_name: &str, fields: &[&str], options: MonitorOptions, callback: F, ) -> Result<(), PvGetError>

Subscribe to a PV with explicit field selection and monitor options.

See MonitorOptions — in particular, set pipeline to request PVAccess monitor pipelining (flow-controlled delivery with client ACKs). When pipelining is disabled this behaves identically to pvmonitor_fields.

Source

pub async fn pvinfo(&self, pv_name: &str) -> Result<StructureDesc, PvGetError>

Retrieve the field/structure description (introspection) for a PV.

Source

pub async fn pvinfo_full( &self, pv_name: &str, ) -> Result<(StructureDesc, SocketAddr), PvGetError>

Retrieve introspection and server address for a PV.

Source

pub async fn pvlist( &self, server_addr: SocketAddr, ) -> Result<Vec<String>, PvGetError>

List PV names served by a specific server (via __pvlist GET).

Source

pub async fn pvlist_with_fallback( &self, server_addr: SocketAddr, ) -> Result<(Vec<String>, PvListSource), PvGetError>

List PV names with automatic fallback through all strategies.

Tries: __pvlist → GET_FIELD (opt-in) → Server RPC → Server GET.

Trait Implementations§

Source§

impl Clone for PvaClient

Source§

fn clone(&self) -> PvaClient

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for PvaClient

Source§

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

Formats the value using the given formatter. Read more

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