/ bindings / python / emtk-py / src / lib.rs
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  }