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 events;
37pub mod field_provider;
38pub mod group;
39pub mod handler;
40pub mod monitor;
41pub mod pv;
42pub mod pva_server;
43pub mod pvstore;
44pub mod record_fields;
45pub mod server;
46pub mod simple_store;
47pub mod state;
48pub mod types;
49
50// Convenience re-exports.
51pub use group::{
52 FieldMapping, GroupMember, GroupPvDef, GroupSource, TriggerDef, merge_group_defs,
53 parse_group_config, parse_info_group,
54};
55pub use handler::PvListMode;
56pub use pv::{AnyPv, Pv, PvArray, PvError, PvScalar};
57pub use pva_server::{PvaServer, PvaServerBuilder, RunningServer, ServeBuilder};
58pub use pvstore::{PvInfo, Source, SourceRegistry};
59pub use server::{PvaServerConfig, PvaServerState, run_pva_server, run_pva_server_with_registry};
60pub use simple_store::SimplePvStore;
61pub use types::{
62 DbCommonState, LinkExpr, OutputMode, RecordData, RecordInstance, RecordType, ScanMode,
63};