1use pyo3::prelude::*;
15use std::sync::OnceLock;
16
17mod context;
18mod distributed;
19mod mailbox;
20mod stateful;
21mod supervisor;
22mod types;
23mod worker;
24
25pub(crate) use context::*;
27pub(crate) use distributed::*;
28pub(crate) use mailbox::*;
29pub(crate) use stateful::*;
30pub(crate) use supervisor::*;
31pub(crate) use types::*;
32
33static TOKIO_RUNTIME: OnceLock<tokio::runtime::Runtime> = OnceLock::new();
35
36#[allow(clippy::expect_used)]
37pub(crate) fn get_runtime() -> &'static tokio::runtime::Runtime {
38 TOKIO_RUNTIME
39 .get_or_init(|| tokio::runtime::Runtime::new().expect("Failed to create tokio runtime"))
40}
41
42#[pymodule]
44fn ash_flare(m: &Bound<'_, PyModule>) -> PyResult<()> {
45 m.add_class::<PyRestartPolicy>()?;
47 m.add_class::<PyRestartStrategy>()?;
48 m.add_class::<PyRestartIntensity>()?;
49
50 m.add_class::<PyChildType>()?;
52 m.add_class::<PyChildExitReason>()?;
53 m.add_class::<PyChildInfo>()?;
54
55 m.add_class::<PyWorkerContext>()?;
57
58 m.add_class::<PyMailboxConfig>()?;
60 m.add_class::<PyMailboxHandle>()?;
61 m.add_class::<PyMailbox>()?;
62 m.add_function(wrap_pyfunction!(mailbox::mailbox, m)?)?;
63 m.add_function(wrap_pyfunction!(mailbox::mailbox_named, m)?)?;
64
65 m.add_class::<PySupervisorSpec>()?;
67 m.add_class::<PySupervisorHandle>()?;
68
69 m.add_class::<PyStatefulSupervisorSpec>()?;
71 m.add_class::<PyStatefulSupervisorHandle>()?;
72
73 m.add_class::<PySupervisorAddress>()?;
75 m.add_class::<PyRemoteSupervisorHandle>()?;
76
77 Ok(())
78}