flowmaid/lib.rs
1// The layout code walks several parallel arrays (positions, sizes,
2// layers) by index on purpose — iterator zips would obscure the
3// math, not clarify it.
4#![allow(clippy::needless_range_loop)]
5
6//! flowmaid — a Mermaid-like diagram engine.
7//!
8//! Supported diagram types: flowcharts (`flowchart` / `graph`),
9//! Entity-Relationship diagrams (`erDiagram`), UML class diagrams
10//! (`classDiagram`), sequence diagrams (`sequenceDiagram`), pie
11//! charts (`pie`), state diagrams (`stateDiagram-v2`), mindmaps
12//! (`mindmap`), and user-journey diagrams (`journey`).
13//!
14//! Library usage:
15//!
16//! ```
17//! let svg = flowmaid::render_svg("flowchart TD\nA[Start] --> B[Done]").unwrap();
18//! assert!(svg.starts_with("<svg"));
19//!
20//! let er = flowmaid::render_svg("erDiagram\nusers ||--o{ posts : writes").unwrap();
21//! assert!(er.contains("users"));
22//!
23//! let uml = flowmaid::render_svg("classDiagram\nAnimal <|-- Dog").unwrap();
24//! assert!(uml.contains("Animal"));
25//! ```
26
27pub mod class;
28pub mod er;
29pub mod journey;
30pub mod layout;
31pub mod mindmap;
32pub mod model;
33pub mod parser;
34pub mod pie;
35pub mod render;
36pub mod scene;
37pub mod seq;
38pub mod style;
39
40pub use model::Document;
41pub use parser::ParseError;
42
43/// Shortcut: Mermaid-syntax text -> SVG string. Dispatches on the
44/// diagram type header (flowchart/graph, erDiagram, classDiagram,
45/// sequenceDiagram, pie, or stateDiagram-v2).
46pub fn render_svg(source: &str) -> Result<String, ParseError> {
47 match parser::parse_document(source)? {
48 // State diagrams live on the same Graph as flowcharts.
49 Document::Flowchart(g) | Document::State(g) => Ok(render::render(&g)),
50 Document::Er(d) => Ok(render::render_er(&d)),
51 Document::Class(d) => Ok(render::render_class(&d)),
52 Document::Sequence(d) => Ok(render::render_seq(&d)),
53 Document::Pie(d) => Ok(render::render_pie(&d)),
54 Document::Mindmap(d) => Ok(render::render_mindmap(&d)),
55 Document::Journey(d) => Ok(render::render_journey(&d)),
56 }
57}