kroki_rs/diagrams/providers/
mermaid.rs

1use crate::browser::BrowserManager;
2use crate::diagrams::{DiagramError, DiagramProvider, DiagramResult};
3use async_trait::async_trait;
4use std::sync::Arc;
5
6pub struct MermaidProvider {
7    browser: Arc<BrowserManager>,
8    _timeout_ms: Option<u64>,
9}
10
11impl MermaidProvider {
12    pub fn new(browser: Arc<BrowserManager>, timeout_ms: Option<u64>) -> Self {
13        Self {
14            browser,
15            _timeout_ms: timeout_ms,
16        }
17    }
18}
19
20#[async_trait]
21impl DiagramProvider for MermaidProvider {
22    fn validate(&self, source: &str) -> DiagramResult<()> {
23        if source.trim().is_empty() {
24            return Err(DiagramError::ValidationFailed(
25                "Diagram source is empty".into(),
26            ));
27        }
28        Ok(())
29    }
30
31    async fn generate(&self, source: &str, format: &str) -> DiagramResult<Vec<u8>> {
32        self.browser.evaluate("mermaid", source, format).await
33    }
34}