Mercurial > touhou
diff python/src/lib.rs @ 770:f6c287745a67
Rust: Add a libtouhou Python wrapper using pyo3
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Tue, 30 Aug 2022 18:23:55 +0200 |
parents | |
children | 7492d384d122 |
line wrap: on
line diff
new file mode 100644 --- /dev/null +++ b/python/src/lib.rs @@ -0,0 +1,41 @@ +use pyo3::prelude::*; +use pyo3::types::PyBytes; +use touhou_formats::th06::pbg3; +use std::fs::File; +use std::io::BufReader; + +#[pyclass] +struct PBG3 { + inner: pbg3::PBG3<BufReader<File>>, +} + +#[pymethods] +impl PBG3 { + #[staticmethod] + fn from_filename(filename: &str) -> PyResult<PBG3> { + let inner = pbg3::from_path_buffered(filename)?; + Ok(PBG3 { + inner + }) + } + + #[getter] + fn file_list(&self) -> Vec<String> { + self.inner.list_files().cloned().collect() + } + + fn list_files(&self) -> Vec<String> { + self.inner.list_files().cloned().collect() + } + + fn get_file(&mut self, py: Python, name: &str) -> PyObject { + let data = self.inner.get_file(name, true).unwrap(); + PyBytes::new(py, &data).into_py(py) + } +} + +#[pymodule] +fn libtouhou(_py: Python, m: &PyModule) -> PyResult<()> { + m.add_class::<PBG3>()?; + Ok(()) +}