//! Mermaid diagram rendering via mermaid-rs-renderer. //! //! Converts Mermaid diagram definitions to SVG at build-time. use mermaid_rs_renderer::RenderOptions; use std::panic; /// Render a Mermaid diagram to SVG. /// /// # Arguments /// * `code` - The Mermaid diagram definition /// /// # Returns /// The rendered SVG string, or an error message on failure. /// /// # Note /// Uses catch_unwind to handle panics in upstream dependencies gracefully. pub fn render_diagram(code: &str) -> Result { let code = code.to_owned(); let result = panic::catch_unwind(move || { let opts = RenderOptions::modern(); mermaid_rs_renderer::render_with_options(&code, opts) }); match result { Ok(Ok(svg)) => Ok(svg), Ok(Err(e)) => Err(e.to_string()), Err(_) => Err("mermaid rendering panicked (upstream bug)".to_string()), } } #[cfg(test)] mod tests { use super::*; #[test] fn test_simple_flowchart() { let result = render_diagram("flowchart LR; A-->B-->C").unwrap(); assert!(result.contains("")); } #[test] fn test_sequence_diagram() { let result = render_diagram("sequenceDiagram\n Alice->>Bob: Hello").unwrap(); assert!(result.contains(" Idle\n Idle --> Processing: Start"); assert!(result.is_ok() || result.is_err()); } }