merman 0.8.0

Parity-focused, headless Rust implementation of Mermaid for parsing, layout, and rendering.
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
use merman::{OperationControl, RenderOutput, RenderRequest, Renderer, SvgRequest};

const SOURCE: &str = "flowchart TD\n  A[Parse] --> B[Layout]\n  B --> C[Geometry]\n";

fn main() -> Result<(), Box<dyn std::error::Error>> {
    let renderer = Renderer::new().with_parse_options(merman::ParseOptions::strict());
    let output = renderer.render(RenderRequest::layout_json(
        SOURCE,
        OperationControl::new(),
        SvgRequest::default(),
    ))?;
    let RenderOutput::LayoutJson(Some(layout)) = output else {
        return Err("no Mermaid diagram detected".into());
    };

    println!("{}", serde_json::to_string_pretty(layout.layout())?);
    Ok(())
}