katana_render_runtime/renderer/backends/
mermaid.rs1use 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}