Skip to main content

spvirit/
lib.rs

1//! spvirit — Python bindings for PVAccess client and server.
2
3use pyo3::prelude::*;
4
5mod convert;
6mod errors;
7mod runtime;
8
9pub mod channel;
10pub mod client;
11pub mod codec;
12pub mod discovery;
13pub mod nt;
14pub mod packet;
15pub mod server;
16pub mod source;
17
18#[pymodule]
19fn spvirit(m: &Bound<'_, PyModule>) -> PyResult<()> {
20    // Install the async bridge onto our shared Tokio runtime.
21    runtime::init_async_runtime();
22
23    // Error types
24    errors::register(m)?;
25
26    // Client classes
27    m.add_class::<client::PyClient>()?;
28    m.add_class::<client::PyClientBuilder>()?;
29    m.add_class::<client::PyGetResult>()?;
30    m.add_class::<client::PyMonitorEvent>()?;
31    m.add_class::<client::PyDiscoveredServer>()?;
32
33    // Server classes
34    m.add_class::<server::PyServerBuilder>()?;
35    m.add_class::<server::PyServer>()?;
36    m.add_class::<server::PyStore>()?;
37
38    // Dynamic-source classes
39    source::register(m)?;
40
41    // NT classes
42    m.add_class::<nt::PyAlarm>()?;
43    m.add_class::<nt::PyTimeStamp>()?;
44    m.add_class::<nt::PyDisplay>()?;
45    m.add_class::<nt::PyControl>()?;
46    m.add_class::<nt::PyNtScalar>()?;
47    m.add_class::<nt::PyNtScalarArray>()?;
48    m.add_class::<nt::PyNtTable>()?;
49    m.add_class::<nt::PyNtNdArray>()?;
50
51    // Module-level functions
52    m.add_function(wrap_pyfunction!(client::py_discover_servers, m)?)?;
53
54    // Submodule: spvirit.codec — standalone encode/decode helpers.
55    codec::register(m)?;
56
57    // Submodule: spvirit.lowlevel — persistent channel & primitives.
58    channel::register(m)?;
59
60    Ok(())
61}