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(())
}