Skip to main content

spvirit_server/
lib.rs

1//! PVAccess server library for EPICS.
2//!
3//! Provides reusable server-side types, .db parsing, connection state, and the
4//! [`Source`] trait that abstracts over a PV data source.  Consumers implement
5//! `Source` and register it with the [`SourceRegistry`] to serve PVs over PVAccess.
6//!
7//! # High-level API
8//!
9//! ```rust,ignore
10//! use spvirit_server::{AnyPv, Pv, PvaServer};
11//!
12//! let temp = Pv::ai("SIM:TEMP", 22.5).units("C").prec(2);
13//! let sp = Pv::ao("SIM:SETPOINT", 25.0)
14//!     .on_put(|_pv, v: f64| if v.is_finite() { Ok(()) } else { Err("NaN".into()) });
15//!
16//! let server = PvaServer::serve([AnyPv::from(temp.clone()), AnyPv::from(sp)])
17//!     .start()
18//!     .await;
19//! temp.set(23.1).await?;
20//!
21//! // Classic builder (still supported):
22//! let server = PvaServer::builder()
23//!     .ai("SIM:TEMP", 22.5)
24//!     .ao("SIM:SETPOINT", 25.0)
25//!     .bo("SIM:ENABLE", false)
26//!     .build();
27//!
28//! server.run().await?;
29//! ```
30
31pub mod apply;
32pub mod beacon;
33pub mod convert;
34pub mod db;
35pub mod decode;
36pub mod group;
37pub mod handler;
38pub mod monitor;
39pub mod pv;
40pub mod pva_server;
41pub mod pvstore;
42pub mod record_fields;
43pub mod server;
44pub mod simple_store;
45pub mod state;
46pub mod types;
47
48// Convenience re-exports.
49pub use group::{
50    FieldMapping, GroupMember, GroupPvDef, GroupSource, TriggerDef, merge_group_defs,
51    parse_group_config, parse_info_group,
52};
53pub use handler::PvListMode;
54pub use pv::{AnyPv, Pv, PvArray, PvError, PvScalar};
55pub use pva_server::{PvaServer, PvaServerBuilder, RunningServer, ServeBuilder};
56pub use pvstore::{PvInfo, Source, SourceRegistry};
57pub use server::{PvaServerConfig, PvaServerState, run_pva_server, run_pva_server_with_registry};
58pub use simple_store::SimplePvStore;
59pub use types::{
60    DbCommonState, LinkExpr, OutputMode, RecordData, RecordInstance, RecordType, ScanMode,
61};