use pyo3::prelude::*;
use std::sync::OnceLock;
mod context;
mod distributed;
mod mailbox;
mod stateful;
mod supervisor;
mod types;
mod worker;
pub(crate) use context::*;
pub(crate) use distributed::*;
pub(crate) use mailbox::*;
pub(crate) use stateful::*;
pub(crate) use supervisor::*;
pub(crate) use types::*;
static TOKIO_RUNTIME: OnceLock<tokio::runtime::Runtime> = OnceLock::new();
#[allow(clippy::expect_used)]
pub(crate) fn get_runtime() -> &'static tokio::runtime::Runtime {
TOKIO_RUNTIME
.get_or_init(|| tokio::runtime::Runtime::new().expect("Failed to create tokio runtime"))
}
#[pymodule]
fn ash_flare(m: &Bound<'_, PyModule>) -> PyResult<()> {
m.add_class::<PyRestartPolicy>()?;
m.add_class::<PyRestartStrategy>()?;
m.add_class::<PyRestartIntensity>()?;
m.add_class::<PyChildType>()?;
m.add_class::<PyChildExitReason>()?;
m.add_class::<PyChildInfo>()?;
m.add_class::<PyWorkerContext>()?;
m.add_class::<PyMailboxConfig>()?;
m.add_class::<PyMailboxHandle>()?;
m.add_class::<PyMailbox>()?;
m.add_function(wrap_pyfunction!(mailbox::mailbox, m)?)?;
m.add_function(wrap_pyfunction!(mailbox::mailbox_named, m)?)?;
m.add_class::<PySupervisorSpec>()?;
m.add_class::<PySupervisorHandle>()?;
m.add_class::<PyStatefulSupervisorSpec>()?;
m.add_class::<PyStatefulSupervisorHandle>()?;
m.add_class::<PySupervisorAddress>()?;
m.add_class::<PyRemoteSupervisorHandle>()?;
Ok(())
}