use crate::error::Error;
pub fn render_mermaid_to_svg(source: &str) -> Result<String, Error> {
let trimmed = source.trim();
if trimmed.is_empty() {
return Ok(String::new());
}
merman::render_svg(trimmed).map_err(|e| Error::Mermaid(e.to_string()))
}
pub fn render_mermaid_to_svg_with_id(source: &str, diagram_id: &str) -> Result<String, Error> {
let trimmed = source.trim();
if trimmed.is_empty() {
return Ok(String::new());
}
merman::render_svg_with_id(trimmed, diagram_id).map_err(|e| Error::Mermaid(e.to_string()))
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn renders_simple_flowchart_to_svg() -> Result<(), Error> {
let diagram = "flowchart TD\n A[Start] --> B[Done]";
let svg = render_mermaid_to_svg(diagram)?;
assert!(svg.contains("<svg"), "Output must contain SVG tag");
assert!(svg.contains("Start"), "SVG must contain node text Start");
assert!(svg.contains("Done"), "SVG must contain node text Done");
Ok(())
}
#[test]
fn renders_empty_string_to_empty_svg() -> Result<(), Error> {
let svg = render_mermaid_to_svg(" ")?;
assert!(svg.is_empty());
Ok(())
}
#[test]
fn renders_with_diagram_id() -> Result<(), Error> {
let diagram = "flowchart TD\n A[Start] --> B[Done]";
let svg = render_mermaid_to_svg_with_id(diagram, "custom_chart_1")?;
assert!(svg.contains("<svg"), "Output must contain SVG tag");
assert!(svg.contains("custom_chart_1"));
Ok(())
}
}