1use 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 pv;
16pub mod server;
17pub mod source;
18
19#[pymodule]
20fn spvirit(m: &Bound<'_, PyModule>) -> PyResult<()> {
21 runtime::init_async_runtime();
23
24 errors::register(m)?;
26
27 m.add_class::<client::PyClient>()?;
29 m.add_class::<client::PyClientBuilder>()?;
30 m.add_class::<client::PyGetResult>()?;
31 m.add_class::<client::PyDiscoveredServer>()?;
32 m.add_class::<client::PySubscription>()?;
33
34 m.add_class::<server::PyServerBuilder>()?;
36 m.add_class::<server::PyServer>()?;
37 m.add_class::<server::PyStore>()?;
38
39 source::register(m)?;
41
42 m.add_class::<nt::PyAlarm>()?;
44 m.add_class::<nt::PyTimeStamp>()?;
45 m.add_class::<nt::PyDisplay>()?;
46 m.add_class::<nt::PyControl>()?;
47 m.add_class::<nt::PyNtScalar>()?;
48 m.add_class::<nt::PyNtScalarArray>()?;
49 m.add_class::<nt::PyNtTable>()?;
50 m.add_class::<nt::PyNtNdArray>()?;
51
52 m.add_class::<pv::PyPv>()?;
54 m.add_function(wrap_pyfunction!(pv::ai, m)?)?;
55 m.add_function(wrap_pyfunction!(pv::ao, m)?)?;
56 m.add_function(wrap_pyfunction!(pv::bi, m)?)?;
57 m.add_function(wrap_pyfunction!(pv::bo, m)?)?;
58 m.add_function(wrap_pyfunction!(pv::string_in, m)?)?;
59 m.add_function(wrap_pyfunction!(pv::string_out, m)?)?;
60 m.add_function(wrap_pyfunction!(pv::longin, m)?)?;
61 m.add_function(wrap_pyfunction!(pv::longout, m)?)?;
62 m.add_function(wrap_pyfunction!(pv::mbbi, m)?)?;
63 m.add_function(wrap_pyfunction!(pv::mbbo, m)?)?;
64 m.add_function(wrap_pyfunction!(pv::waveform, m)?)?;
65 m.add_function(wrap_pyfunction!(pv::aai, m)?)?;
66 m.add_function(wrap_pyfunction!(pv::aao, m)?)?;
67 m.add_function(wrap_pyfunction!(pv::calc, m)?)?;
68 m.add_function(wrap_pyfunction!(pv::pv, m)?)?;
69
70 m.add_function(wrap_pyfunction!(client::py_discover_servers, m)?)?;
72
73 codec::register(m)?;
75
76 channel::register(m)?;
78
79 Ok(())
80}