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