lib.rs
1 use exparser::{ 2 fty::{self, Fty}, 3 pyo3::{intern, prelude::*}, 4 rfc::{self, Rfc}, 5 rfi::{self, Rfi}, 6 rpk::{self, Rpk}, 7 wav::{self, Wav}, 8 Format, Unknown, 9 }; 10 11 #[pymodule(name = "_internal_emtk_py", crate = "exparser::pyo3")] 12 fn emtk_py(py: Python, m: &Bound<'_, PyModule>) -> PyResult<()> { 13 pyo3_log::init(); 14 15 // We need to make the submodules as a package in order to be able to import it in python 16 let sys_module = py.import_bound("sys")?.getattr("modules")?; 17 18 // exparser module 19 let exparser = PyModule::new_bound(m.py(), "emtk.exparser")?; 20 exparser.add_class::<Unknown>()?; 21 exparser.add_class::<Format>()?; 22 m.setattr(intern!(m.py(), "exparser"), &exparser)?; 23 sys_module.set_item("emtk.exparser", &exparser)?; 24 25 // fty module 26 let fty = PyModule::new_bound(exparser.py(), "emtk.exparser.fty")?; 27 fty.add("MAGIC_V1", fty::MAGIC_V1)?; 28 fty.add("MAGIC_V2", fty::MAGIC_V2)?; 29 fty.add_class::<Fty>()?; 30 exparser.setattr(intern!(exparser.py(), "fty"), &fty)?; 31 sys_module.set_item("emtk.exparser.fty", &fty)?; 32 33 // rfc module 34 let rfc = PyModule::new_bound(exparser.py(), "emtk.exparser.rfc")?; 35 rfc.add("MAGIC", rfc::MAGIC)?; 36 rfc.add_class::<Rfc>()?; 37 exparser.setattr(intern!(exparser.py(), "rfc"), &rfc)?; 38 sys_module.set_item("emtk.exparser.rfc", &rfc)?; 39 40 // rfi module 41 let rfi = PyModule::new_bound(exparser.py(), "emtk.exparser.rfi")?; 42 rfi.add("MAGIC", rfi::MAGIC)?; 43 rfi.add_class::<Rfi>()?; 44 exparser.setattr(intern!(exparser.py(), "rfi"), &rfi)?; 45 sys_module.set_item("emtk.exparser.rfi", &rfi)?; 46 47 // rpk module 48 let rpk = PyModule::new_bound(exparser.py(), "emtk.exparser.rpk")?; 49 rpk.add("MAGIC", rpk::MAGIC)?; 50 rpk.add_class::<rpk::Entry>()?; 51 rpk.add_class::<Rpk>()?; 52 exparser.setattr(intern!(exparser.py(), "rpk"), &rpk)?; 53 sys_module.set_item("emtk.exparser.rpk", &rpk)?; 54 55 // wav module 56 let wav = PyModule::new_bound(exparser.py(), "emtk.exparser.wav")?; 57 wav.add("MAGIC", wav::MAGIC)?; 58 wav.add_class::<Wav>()?; 59 exparser.setattr(intern!(exparser.py(), "wav"), &wav)?; 60 sys_module.set_item("emtk.exparser.wav", &wav)?; 61 62 Ok(()) 63 }