Skip to main content

katana_render_runtime/renderer/backends/
mermaid.rs

1use crate::markdown::color_preset::DiagramColorPreset;
2use crate::markdown::{DiagramBlock, mermaid_renderer::MermaidRenderOps};
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 MermaidRenderer {
10    runtime_path: PathBuf,
11}
12
13impl MermaidRenderer {
14    pub fn with_runtime_path(runtime_path: PathBuf) -> Self {
15        Self { runtime_path }
16    }
17}
18
19impl Renderer for MermaidRenderer {
20    fn render(&self, input: &RenderInput) -> Result<RenderOutput, RenderError> {
21        if input.kind != DiagramKind::Mermaid {
22            return Err(RenderError::UnsupportedKind);
23        }
24        RenderOutputFactory::from_diagram_result(
25            input,
26            self.render_block(input),
27            RuntimeDescriptor::mermaid(),
28        )
29    }
30}
31
32impl MermaidRenderer {
33    fn render_block(&self, input: &RenderInput) -> crate::markdown::DiagramResult {
34        let block = DiagramBlock {
35            kind: crate::markdown::DiagramKind::Mermaid,
36            source: input.source.clone(),
37        };
38        let preset = DiagramColorPreset::for_render_input(input);
39        MermaidRenderOps::render_mermaid_with_runtime_path(&block, &self.runtime_path, &preset)
40    }
41}