use pyo3::exceptions::PyValueError;
use pyo3::prelude::*;
use pyo3::types::PyBytes;
#[pyfunction]
#[pyo3(signature = (svg, scale = 1.0))]
fn svg_to_png<'py>(py: Python<'py>, svg: &[u8], scale: f32) -> PyResult<Bound<'py, PyBytes>> {
let png = crate::svg_to_png(svg, scale).map_err(|e| PyValueError::new_err(e.to_string()))?;
Ok(PyBytes::new(py, &png))
}
#[cfg(feature = "bpmn")]
#[pyfunction]
fn bpmn_import(xml: &str) -> PyResult<String> {
let diagram = crate::bpmn::import(xml).map_err(PyValueError::new_err)?;
Ok(crate::bpmn::model_json(&diagram).to_string())
}
#[cfg(feature = "bpmn")]
#[pyfunction]
fn bpmn_layout(blocks_json: &str) -> PyResult<String> {
let diagram =
crate::bpmn::bpmn_layout::layout_json(blocks_json).map_err(PyValueError::new_err)?;
Ok(crate::bpmn::model_json(&diagram).to_string())
}
#[cfg(feature = "bpmn")]
#[pyfunction]
fn bpmn_to_svg(xml: &str) -> PyResult<String> {
let diagram = crate::bpmn::import(xml).map_err(PyValueError::new_err)?;
Ok(crate::bpmn::render(&diagram))
}
#[cfg(feature = "bpmn")]
#[pyfunction]
fn bpmn_export(model_json: &str) -> PyResult<String> {
let diagram = crate::bpmn::from_json(model_json).map_err(PyValueError::new_err)?;
Ok(crate::bpmn::export(&diagram))
}
#[cfg(feature = "bpmn")]
#[pyfunction]
#[pyo3(signature = (model_json, animate = false, background = None))]
fn bpmn_render(model_json: &str, animate: bool, background: Option<String>) -> PyResult<String> {
let diagram = crate::bpmn::from_json(model_json).map_err(PyValueError::new_err)?;
let opts = crate::bpmn::RenderOpts {
animate,
background,
};
Ok(crate::bpmn::render_opts(&diagram, &opts))
}
#[cfg(feature = "bpmn")]
#[pyfunction]
fn drawio_from_kymojson(json: &str) -> PyResult<String> {
crate::drawio_from_kymojson(json).map_err(PyValueError::new_err)
}
#[cfg(feature = "pdf")]
#[pyfunction]
fn svg_to_pdf<'py>(py: Python<'py>, svg: &[u8]) -> PyResult<Bound<'py, PyBytes>> {
let pdf = crate::svg_to_pdf(svg).map_err(|e| PyValueError::new_err(e.to_string()))?;
Ok(PyBytes::new(py, &pdf))
}
#[pyfunction]
fn mermaid_to_kymojson(src: &str) -> PyResult<String> {
crate::mermaid_to_kymojson(src).map_err(|e| PyValueError::new_err(e.to_string()))
}
#[pyfunction]
fn mermaid_to_d2(src: &str) -> PyResult<String> {
crate::mermaid_to_d2(src).map_err(|e| PyValueError::new_err(e.to_string()))
}
#[pyfunction]
fn mermaid_to_dot(src: &str) -> PyResult<String> {
crate::mermaid_to_dot(src).map_err(|e| PyValueError::new_err(e.to_string()))
}
#[pyfunction]
fn mermaid_to_mermaid(src: &str) -> PyResult<String> {
crate::mermaid_to_mermaid(src).map_err(|e| PyValueError::new_err(e.to_string()))
}
#[pyfunction]
fn mermaid_to_drawio(src: &str) -> PyResult<String> {
crate::mermaid_to_drawio(src).map_err(|e| PyValueError::new_err(e.to_string()))
}
#[pyfunction]
fn mermaid_to_svg(src: &str) -> PyResult<String> {
crate::mermaid_to_svg(src).map_err(|e| PyValueError::new_err(e.to_string()))
}
#[pyfunction]
fn d2_to_svg(src: &str) -> PyResult<String> {
crate::d2_to_svg(src).map_err(|e| PyValueError::new_err(e.to_string()))
}
#[pyfunction]
fn d2_to_kymojson(src: &str) -> PyResult<String> {
crate::d2_to_kymojson(src).map_err(|e| PyValueError::new_err(e.to_string()))
}
#[pyfunction]
fn dot_to_svg(src: &str) -> PyResult<String> {
crate::dot_to_svg(src).map_err(|e| PyValueError::new_err(e.to_string()))
}
#[pyfunction]
fn dot_to_kymojson(src: &str) -> PyResult<String> {
crate::dot_to_kymojson(src).map_err(|e| PyValueError::new_err(e.to_string()))
}
#[pymodule]
fn _kymostudio_core(m: &Bound<'_, PyModule>) -> PyResult<()> {
m.add("__version__", env!("CARGO_PKG_VERSION"))?;
m.add_function(wrap_pyfunction!(svg_to_png, m)?)?;
#[cfg(feature = "pdf")]
m.add_function(wrap_pyfunction!(svg_to_pdf, m)?)?;
#[cfg(feature = "bpmn")]
{
m.add_function(wrap_pyfunction!(bpmn_import, m)?)?;
m.add_function(wrap_pyfunction!(bpmn_layout, m)?)?;
m.add_function(wrap_pyfunction!(bpmn_to_svg, m)?)?;
m.add_function(wrap_pyfunction!(bpmn_export, m)?)?;
m.add_function(wrap_pyfunction!(bpmn_render, m)?)?;
m.add_function(wrap_pyfunction!(drawio_from_kymojson, m)?)?;
}
m.add_function(wrap_pyfunction!(mermaid_to_kymojson, m)?)?;
m.add_function(wrap_pyfunction!(mermaid_to_d2, m)?)?;
m.add_function(wrap_pyfunction!(mermaid_to_dot, m)?)?;
m.add_function(wrap_pyfunction!(mermaid_to_mermaid, m)?)?;
m.add_function(wrap_pyfunction!(mermaid_to_drawio, m)?)?;
m.add_function(wrap_pyfunction!(mermaid_to_svg, m)?)?;
m.add_function(wrap_pyfunction!(d2_to_svg, m)?)?;
m.add_function(wrap_pyfunction!(d2_to_kymojson, m)?)?;
m.add_function(wrap_pyfunction!(dot_to_svg, m)?)?;
m.add_function(wrap_pyfunction!(dot_to_kymojson, m)?)?;
Ok(())
}