kroki_rs/diagrams/providers/
mermaid.rs1use 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}