Skip to main content

thrust_py/
lib.rs

1//! Python bindings for thrust core functionalities.
2
3use pyo3::prelude::*;
4
5pub mod airac;
6pub mod airports;
7pub mod airspaces;
8pub mod airways;
9pub mod field15;
10pub mod intervals;
11pub mod navpoints;
12
13#[pymodule]
14#[pyo3(name = "core")]
15fn thrust(py: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> {
16    let interval_mod = intervals::init(py)?;
17    m.add_submodule(&interval_mod)?;
18
19    // This works "from thrust.core import intervals" in Python
20    // The following allows to import as "import thrust.core.intervals"
21    // or "from thrust.core.intervals import ..."
22    let sys = py.import("sys")?;
23    let modules = sys.getattr("modules")?;
24    modules.set_item("thrust.core.intervals", &interval_mod)?;
25
26    let field15_mod = field15::init(py)?;
27    m.add_submodule(&field15_mod)?;
28    modules.set_item("thrust.core.field15", &field15_mod)?;
29
30    let airports_mod = airports::init(py)?;
31    m.add_submodule(&airports_mod)?;
32    modules.set_item("thrust.core.airports", &airports_mod)?;
33
34    let airac_mod = airac::init(py)?;
35    m.add_submodule(&airac_mod)?;
36    modules.set_item("thrust.core.airac", &airac_mod)?;
37
38    let airways_mod = airways::init(py)?;
39    m.add_submodule(&airways_mod)?;
40    modules.set_item("thrust.core.airways", &airways_mod)?;
41
42    let airspaces_mod = airspaces::init(py)?;
43    m.add_submodule(&airspaces_mod)?;
44    modules.set_item("thrust.core.airspaces", &airspaces_mod)?;
45
46    let navpoints_mod = navpoints::init(py)?;
47    m.add_submodule(&navpoints_mod)?;
48    modules.set_item("thrust.core.navpoints", &navpoints_mod)?;
49
50    Ok(())
51}