use crate::{
Layout,
generator::{Generator, Image},
};
use pyo3::{exceptions::PyOSError, prelude::*};
use std::{borrow::Cow, path::PathBuf};
#[pymethods]
impl Generator {
#[new]
#[pyo3(
text_signature = "(external_resource_paths: list[Path| str] | None = None, cache_root: Path | str | None = None) -> Generator",
signature = (external_resource_paths=None, cache_root=None)
)]
pub fn new_py(
external_resource_paths: Option<Vec<PathBuf>>,
cache_root: Option<PathBuf>,
) -> PyResult<Self> {
Generator::new(external_resource_paths.unwrap_or_default(), cache_root)
.map_err(|e| PyOSError::new_err(format!("{e:?}")))
}
#[pyo3(name = "render", text_signature = "(layout: Layout) -> Image")]
pub fn render_py<'py>(&self, py: Python<'py>, layout: Layout) -> PyResult<Bound<'py, PyAny>> {
let this = self.clone();
pyo3_async_runtimes::tokio::future_into_py(py, async move {
this.render(layout)
.await
.map_err(|e| PyOSError::new_err(format!("{e:?}")))
})
}
}
#[pymethods]
impl Image {
#[getter(bytes)]
pub fn get_bytes_py(&'_ self) -> PyResult<Cow<'_, [u8]>> {
self.get_bytes()
.map_err(|e| PyOSError::new_err(e.to_string()))
}
#[pyo3(text_signature = "(name: Path | str) -> None", name = "save")]
pub fn save_py(&self, name: PathBuf) -> PyResult<()> {
self.save(&name)
.map_err(|e| PyOSError::new_err(e.to_string()))
}
#[getter(sha256)]
pub fn get_sha256_py(&self) -> PyResult<String> {
self.get_sha256()
.map_err(|e| PyOSError::new_err(e.to_string()))
}
}