Mercurial > touhou
view 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 source
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(()) }