ks_constants_rs 0.1.2

Constants for use in Kerrigan Survival projects
Documentation
pub mod roles;
pub mod devs;
pub mod roletypes;
pub mod locales;
pub mod ranks;
pub mod maps;
pub mod map_switch;

use pyo3::{prelude::*};
use roles::Roles;
use roletypes::{RoleType, Team};
use map_switch::{COMMON_FILES,PRECLEAR_FILES};
use devs::Developer;
use locales::Language;

use crate::maps::Maps;

#[macro_export]
macro_rules! add_pymodule {
    ($py:expr, $parent:expr, $name:expr, [$($cls:ty),* $(,)?]) => {{
        let sub_module = pyo3::types::PyModule::new($py, $name)?;
        $(
            sub_module.add_class::<$cls>()?;
        )*
        $parent.add_submodule(&sub_module)?;
        $py.import("sys")?
            .getattr("modules")?
            .set_item(format!("ks_constants_rs.{}", $name), &sub_module)?;
        Ok::<_, pyo3::PyErr>(())
    }};
}

#[pymodule(name = "ks_constants_rs")]
fn ks_constants_rs(py: Python<'_>, m: &Bound<'_, PyModule>) -> PyResult<()> {
    let instance = Roles::new();
    let py_instance = Py::new(py, instance)?;
    let submod = PyModule::new(py, "roles")?;
    submod.add("Role", py_instance)?;
    submod.add_class::<RoleType>()?;
    submod.add_class::<Team>()?;
    m.add_submodule(&submod)?;

    add_pymodule!(py, m, "devs", [Developer])?;
    add_pymodule!(py, m, "locale", [Language])?;
    add_pymodule!(py, m, "maps", [Maps])?;
    let submod2 = PyModule::new(py, "map_switch")?;
    submod2.add("PRECLEAR_FILES", PRECLEAR_FILES)?;
    submod2.add("COMMON_FILES", COMMON_FILES)?;
    m.add_submodule(&submod2)?;
    py.import("sys")?.getattr("modules")?.set_item("ks_constants_rs.roles", &submod)?;
    py.import("sys")?.getattr("modules")?.set_item("ks_constants_rs.map_switch", &submod2)?;
    Ok(())
}