| Crates.io | mermaid-builder |
| lib.rs | mermaid-builder |
| version | 0.1.1 |
| created_at | 2026-01-01 19:16:41.624438+00 |
| updated_at | 2026-01-01 20:43:31.019659+00 |
| description | A Rust library for generating Mermaid diagrams using the builder pattern. |
| homepage | |
| repository | https://github.com/earth-metabolome-initiative/mermaid-builder |
| max_upload_size | |
| id | 2017306 |
| size | 234,342 |
Mermaid Builder is a Rust crate that provides a type-safe, builder-pattern-based API for generating Mermaid diagram syntax. It allows you to define diagrams programmatically in Rust and export them as strings that can be rendered by Mermaid tools.
Add this to your Cargo.toml:
[dependencies]
mermaid-builder = "0.1.0"
Or run:
cargo add mermaid-builder
For more details, check the documentation for FlowchartBuilder, FlowchartNodeBuilder, FlowchartEdgeBuilder, and Flowchart.
use mermaid_builder::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut builder = FlowchartBuilder::default();
// Create nodes
let node1 = builder
.node(FlowchartNodeBuilder::default().label("Start")?)?;
let node2 = builder
.node(FlowchartNodeBuilder::default().label("End")?)?;
// Create edge
builder
.edge(
FlowchartEdgeBuilder::default()
.source(node1)?
.destination(node2)?
.right_arrow_shape(ArrowShape::Normal)?
)?;
// Build the flowchart
let flowchart = Flowchart::from(builder);
// Print the mermaid syntax
println!("{}", flowchart);
let expected = r#"flowchart LR
v0@{shape: rect, label: "Start"}
v1@{shape: rect, label: "End"}
v0 ---> v1
"#;
assert_eq!(flowchart.to_string(), expected);
Ok(())
}
Output:
flowchart LR
v0@{shape: rect, label: "Start"}
v1@{shape: rect, label: "End"}
v0 ---> v1
For more details, check the documentation for ClassDiagramBuilder, ClassNodeBuilder, ClassEdgeBuilder, and ClassDiagram.
use mermaid_builder::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut builder = ClassDiagramBuilder::default();
// Create class nodes
let animal = builder
.node(ClassNodeBuilder::default().label("Animal")?)?;
let dog = builder
.node(ClassNodeBuilder::default().label("Dog")?)?;
// Create inheritance edge
builder
.edge(
ClassEdgeBuilder::default()
.source(animal)?
.destination(dog)?
.right_arrow_shape(ArrowShape::Triangle)?
)?;
let class_diagram = ClassDiagram::from(builder);
println!("{}", class_diagram);
let expected = r#"---
config:
class:
hideEmptyMembersBox: "false"
---
classDiagram
direction LR
class v0["Animal"] {
}
class v1["Dog"] {
}
v0 --|> v1
"#;
assert_eq!(class_diagram.to_string(), expected);
Ok(())
}
Output:
---
config:
class:
hideEmptyMembersBox: "false"
---
classDiagram
direction LR
class v0["Animal"] {
}
class v1["Dog"] {
}
v0 --|> v1
For more details, check the documentation for ERDiagramBuilder, ERNodeBuilder, EREdgeBuilder, and ERDiagram.
use mermaid_builder::prelude::*;
fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut builder = ERDiagramBuilder::default();
let customer = builder
.node(ERNodeBuilder::default().label("CUSTOMER")?)?;
let order = builder
.node(ERNodeBuilder::default().label("ORDER")?)?;
// Create relationship
builder
.edge(EREdgeBuilder::one_or_more(customer, order))?;
let er_diagram = ERDiagram::from(builder);
println!("{}", er_diagram);
let expected = r#"---
config:
layout: dagre
theme: default
look: classic
---
erDiagram
direction LR
v0["CUSTOMER"]
v1["ORDER"]
v0 }|--|{ v1 : ""
"#;
assert_eq!(er_diagram.to_string(), expected);
Ok(())
}
Output:
---
config:
layout: dagre
theme: default
look: classic
---
erDiagram
direction LR
v0["CUSTOMER"]
v1["ORDER"]
v0 }|--|{ v1 : ""
Contributions are welcome! Please feel free to submit a Pull Request.
This project is licensed under the MIT License.