Skip to main content

katana_render_runtime/renderer/backends/
drawio.rs

1use crate::markdown::color_preset::DiagramColorPreset;
2use crate::markdown::{DiagramBlock, drawio_renderer::DrawioRendererOps};
3use crate::renderer::api::{DiagramKind, RenderError, RenderInput, RenderOutput, Renderer};
4use crate::renderer::output::RenderOutputFactory;
5use crate::renderer::runtime::RuntimeDescriptor;
6use std::path::PathBuf;
7
8#[derive(Debug, Clone)]
9pub struct DrawioRenderer {
10    runtime_path: PathBuf,
11}
12
13impl DrawioRenderer {
14    pub fn with_runtime_path(runtime_path: PathBuf) -> Self {
15        Self { runtime_path }
16    }
17}
18
19impl Renderer for DrawioRenderer {
20    fn render(&self, input: &RenderInput) -> Result<RenderOutput, RenderError> {
21        if input.kind != DiagramKind::Drawio {
22            return Err(RenderError::UnsupportedKind);
23        }
24        RenderOutputFactory::from_diagram_result(
25            input,
26            self.render_block(input),
27            RuntimeDescriptor::drawio(),
28        )
29    }
30}
31
32impl DrawioRenderer {
33    fn render_block(&self, input: &RenderInput) -> crate::markdown::DiagramResult {
34        let block = DiagramBlock {
35            kind: crate::markdown::DiagramKind::DrawIo,
36            source: input.source.clone(),
37        };
38        let preset = DiagramColorPreset::for_render_input(input);
39        DrawioRendererOps::render_drawio_with_runtime_path(&block, &self.runtime_path, &preset)
40    }
41}