use pyo3::prelude::*;
mod convert;
mod errors;
mod runtime;
pub mod channel;
pub mod client;
pub mod codec;
pub mod discovery;
pub mod nt;
pub mod packet;
pub mod server;
pub mod source;
#[pymodule]
fn spvirit(m: &Bound<'_, PyModule>) -> PyResult<()> {
runtime::init_async_runtime();
errors::register(m)?;
m.add_class::<client::PyClient>()?;
m.add_class::<client::PyClientBuilder>()?;
m.add_class::<client::PyGetResult>()?;
m.add_class::<client::PyMonitorEvent>()?;
m.add_class::<client::PyDiscoveredServer>()?;
m.add_class::<server::PyServerBuilder>()?;
m.add_class::<server::PyServer>()?;
m.add_class::<server::PyStore>()?;
source::register(m)?;
m.add_class::<nt::PyAlarm>()?;
m.add_class::<nt::PyTimeStamp>()?;
m.add_class::<nt::PyDisplay>()?;
m.add_class::<nt::PyControl>()?;
m.add_class::<nt::PyNtScalar>()?;
m.add_class::<nt::PyNtScalarArray>()?;
m.add_class::<nt::PyNtTable>()?;
m.add_class::<nt::PyNtNdArray>()?;
m.add_function(wrap_pyfunction!(client::py_discover_servers, m)?)?;
codec::register(m)?;
channel::register(m)?;
Ok(())
}